关于sum函数的Python弃用警告

时间:2019-02-04 12:00:18

标签: python numpy

我编写了一个算法,直到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并重新安装它。但是这些解决方案不适用于我的代码。我该如何解决?预先感谢...

3 个答案:

答案 0 :(得分:2)

请勿从sum导入numpy。在您的代码中寻找from numpy import sumfrom numpy import *并删除这些行。否则,您将覆盖内置的sumnp.sumbuilt-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所示。

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

  1. 导入内置模块:

    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之前将内置总和分配给另一个变量:

    bltin_sum = sum

    from numpy import *

    bltin_sum(hopen[i]*fixedCost for i in Fset)

我已经检查了内置和的性能是否也符合numpy数组的预期。

答案 2 :(得分:1)

您要做的就是使用sum而不是np.sum。我遇到了同样的问题。当我切换到内置总和后,警告消失了。

您不必进行任何特殊导入或分配任何内容。