我编写了一个算法,直到2周前它都可以正常工作。我收到此警告,但我不明白为什么得到它。警告是:
“ C:/用户/管理员/文档/Python/sezg_1_diffne.py:147: DeprecationWarning:不建议调用np.sum(generator),并且在 未来会带来不同的结果。采用 np.sum(np.from_iter(generator))或内置的python sum。 obje_1 = detmas.objVal + sum(fset中i的hopen [i] * fixedCost)“
我的代码的一部分是:
obje_1=detmas.objVal+sum(hopen[i]*fixedCost for i in Fset)
我尝试了一些在互联网上找到的东西,例如删除numpy并重新安装它。但是这些解决方案不适用于我的代码。我该如何解决?预先感谢...
答案 0 :(得分:2)
请勿从sum
导入numpy
。在您的代码中寻找from numpy import sum
或from numpy import *
并删除这些行。否则,您将覆盖内置的sum
。 np.sum
和built-in sum
是具有不同要求的独立功能。
警告表明,虽然您的代码现在可以运行,但将来可能无法运行。请注意,您实际上确实在隐式使用生成器。这些行是等效的:
sum(hopen[i]*fixedCost for i in Fset)
sum((hopen[i]*fixedCost for i in Fset))
在Python中,不需要多余的括号即可明确表示生成器。当您避免从NumPy库导入sum
时,错误将消失。
答案 1 :(得分:1)
我找到了jpp的替代解决方案。如果您希望保留from numpy import *
,则可以在导入numpy之前将内置对象分配给其他变量,如图here所示。
在您的特定情况下,您有两种选择:
导入内置模块:
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之前将内置总和分配给另一个变量:
bltin_sum = sum
from numpy import *
bltin_sum(hopen[i]*fixedCost for i in Fset)
我已经检查了内置和的性能是否也符合numpy数组的预期。
答案 2 :(得分:1)
您要做的就是使用sum
而不是np.sum
。我遇到了同样的问题。当我切换到内置总和后,警告消失了。
您不必进行任何特殊导入或分配任何内容。