Предупреждение об устаревании 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, как показано здесь.

В вашем конкретном случае у вас есть два варианта:

  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.

Другие вопросы по тегам