Предупреждение об устаревании Python относительно функции sum
Я кодировал алгоритм, и он работал правильно до 2 недель назад. Я получаю это предупреждение, и я не могу понять, почему я его получаю. Предупреждение:
"C: /Users/Administrator/Documents/Python/sezg_1_diffne.py: 147: DeprecationWarning: вызов np.sum(generator) устарел и в будущем даст другой результат. Используйте np.sum(np.from_iter(generator))) или встроенная сумма python вместо этого. obje_1=detmas.objVal+sum(hopen[i]*fixedCost для i в Fset)"
Часть моего кода:
obje_1=detmas.objVal+sum(hopen[i]*fixedCost for i in Fset)
Я попробовал что-то, что я нашел в интернете, например, удаление numpy и переустановить его. Однако эти решения не работают для моего кода. Как я могу это решить? Заранее спасибо...
1 ответ
Не импортировать sum
от numpy
, Ищу from numpy import sum
или же from numpy import *
в вашем коде и удалите эти строки. В противном случае вы переопределите встроенный sum
, np.sum
и встроенный sum
являются независимыми функциями с различными требованиями.
Предупреждение предполагает, что, хотя ваш код может работать сейчас, он может не работать в будущем. Обратите внимание, что вы на самом деле используете генератор неявно. Эти строки эквивалентны:
sum(hopen[i]*fixedCost for i in Fset)
sum((hopen[i]*fixedCost for i in Fset))
В Python дополнительные скобки не требуются для явного обозначения генератора. Ваша ошибка исчезнет, когда вы избежите импорта sum
из библиотеки NumPy.
Все, что вам нужно сделать, это использовать sum
вместо того np.sum
. Я столкнулся с той же проблемой. Предупреждение исчезло после того, как я перешел на встроенную сумму.
Вам не нужно делать никаких специальных операций импорта или назначать что-либо.
Я нашел альтернативное решение по Jpp. Если вы хотите сохранить from numpy import *
Вы можете назначить встроенный объект другой переменной перед импортом numpy, как показано здесь.
В вашем конкретном случае у вас есть два варианта:
Импортируем встроенный модуль:
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.