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 sumfrom numpy import * 并删除这些行。否则,您将覆盖内置 sumnp.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.

在您的特定情况下,您有两种选择:

  1. 导入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)

  2. 在导入 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 总和后警告消失了。

您无需执行任何特殊导入或分配任何内容。