Python 关于 sum 函数的弃用警告
Python deprecation warning about sum function
我编写了一个算法,直到 2 周前它都能正常工作。我收到此警告,但我不明白为什么会收到它。警告是:
"C:/Users/Administrator/Documents/Python/sezg_1_diffne.py:147:
DeprecationWarning: Calling np.sum(generator) is deprecated, and in
the future will give a different result. Use
np.sum(np.from_iter(generator)) or the python sum builtin instead.
obje_1=detmas.objVal+sum(hopen[i]*fixedCost for i in Fset)"
我的部分代码是:
obje_1=detmas.objVal+sum(hopen[i]*fixedCost for i in Fset)
我尝试了一些我在互联网上找到的东西,例如删除 numpy 并重新安装它。但是这些解决方案不适用于我的代码。我该如何解决?提前致谢...
不要从 numpy
导入 sum
。在您的代码中查找 from numpy import sum
或 from numpy import *
并删除这些行。否则,您将覆盖内置 sum
。 np.sum
and built-in sum
是具有不同要求的独立函数。
该警告表明,虽然您的代码现在可以运行,但将来可能无法运行。请注意,您实际上确实隐式使用了生成器。这些行是等价的:
sum(hopen[i]*fixedCost for i in Fset)
sum((hopen[i]*fixedCost for i in Fset))
在Python中,不需要额外的括号来明确表示生成器。如果您避免从 NumPy 库中导入 sum
,您的错误就会消失。
我找到了 jpp 的替代解决方案。如果您希望保留 from numpy import *
,您可以在导入 numpy 之前将 built-in 对象分配给不同的变量,如图所示 here.
在您的特定情况下,您有两种选择:
导入built-in模块:
import builtins
表示 Python 3,或 import __builtin__
表示 Python 2。然后您调用 builtins.sum(hopen[i]*fixedCost for i in Fset)
或 __builtin__.sum(hopen[i]*fixedCost for i in Fset)
。
在导入 numpy 之前将 built-in 总和分配给不同的变量:
bltin_sum = sum
from numpy import *
bltin_sum(hopen[i]*fixedCost for i in Fset)
我已经检查过 built-in 总和对于 numpy 数组的行为也符合预期。
您所要做的就是使用 sum
而不是 np.sum
。我运行陷入了同样的问题。在我切换到 built-in 总和后警告消失了。
您无需执行任何特殊导入或分配任何内容。
我编写了一个算法,直到 2 周前它都能正常工作。我收到此警告,但我不明白为什么会收到它。警告是:
"C:/Users/Administrator/Documents/Python/sezg_1_diffne.py:147: DeprecationWarning: Calling np.sum(generator) is deprecated, and in the future will give a different result. Use np.sum(np.from_iter(generator)) or the python sum builtin instead. obje_1=detmas.objVal+sum(hopen[i]*fixedCost for i in Fset)"
我的部分代码是:
obje_1=detmas.objVal+sum(hopen[i]*fixedCost for i in Fset)
我尝试了一些我在互联网上找到的东西,例如删除 numpy 并重新安装它。但是这些解决方案不适用于我的代码。我该如何解决?提前致谢...
不要从 numpy
导入 sum
。在您的代码中查找 from numpy import sum
或 from numpy import *
并删除这些行。否则,您将覆盖内置 sum
。 np.sum
and built-in sum
是具有不同要求的独立函数。
该警告表明,虽然您的代码现在可以运行,但将来可能无法运行。请注意,您实际上确实隐式使用了生成器。这些行是等价的:
sum(hopen[i]*fixedCost for i in Fset)
sum((hopen[i]*fixedCost for i in Fset))
在Python中,不需要额外的括号来明确表示生成器。如果您避免从 NumPy 库中导入 sum
,您的错误就会消失。
我找到了 jpp 的替代解决方案。如果您希望保留 from numpy import *
,您可以在导入 numpy 之前将 built-in 对象分配给不同的变量,如图所示 here.
在您的特定情况下,您有两种选择:
导入built-in模块:
import builtins
表示 Python 3,或import __builtin__
表示 Python 2。然后您调用builtins.sum(hopen[i]*fixedCost for i in Fset)
或__builtin__.sum(hopen[i]*fixedCost for i in Fset)
。在导入 numpy 之前将 built-in 总和分配给不同的变量:
bltin_sum = sum
from numpy import *
bltin_sum(hopen[i]*fixedCost for i in Fset)
我已经检查过 built-in 总和对于 numpy 数组的行为也符合预期。
您所要做的就是使用 sum
而不是 np.sum
。我运行陷入了同样的问题。在我切换到 built-in 总和后警告消失了。
您无需执行任何特殊导入或分配任何内容。