4
votes

Avertissement de dépréciation de Python concernant la fonction sum

J'ai codé un algorithme et il a fonctionné correctement jusqu'à il y a 2 semaines. Je reçois cet avertissement et je ne comprends pas pourquoi je le comprends. L'avertissement est:

"C: /Users/Administrator/Documents/Python/sezg_1_diffne.py: 147: DeprecationWarning: L'appel de np.sum (générateur) est obsolète, et l'avenir donnera un résultat différent. Utilisation np.sum (np.from_iter (générateur)) ou la somme intégrée de python à la place. obje_1 = detmas.objVal + sum (hopen [i] * fixedCost pour i dans Fset) "

Une partie de mon code est:

obje_1=detmas.objVal+sum(hopen[i]*fixedCost for i in Fset)

J'ai essayé quelque chose que j'ai trouvé sur Internet, comme supprimer numpy et le réinstaller. Cependant, ces solutions ne fonctionnaient pas pour mon code. Comment puis-je le résoudre? Merci d'avance ...


3 commentaires

Qu'y a-t-il à résoudre? Il s'agit d'un avertissement et vous indique qu'à l'avenir votre solution actuelle ( np.sum ) peut ne pas fonctionner comme prévu et vous donne le code exact pour la remplacer. Vous pouvez soit le remplacer par le code suggéré maintenant, soit le laisser pour le moment - c'est à vous de décider.


Il semble que vous ayez dû effectuer depuis numpy import sum . Non, sinon vous écrasez la méthode intégrée sum , qui fonctionne avec les générateurs


Merci pour vos réponses. Cependant mon code n'inclut que la ligne import numpy as np . Je résous avec le code obje_1 = detmas.objVal + sum (hopen.values ​​()) * fixedCost . Cependant, je ne peux pas résoudre pour pour ind in range (0, sjt): tot_dis [ind] = sum (dist [unop [ind], ophu [stz]]) ​​


3 Réponses :


6
votes

3 commentaires

Merci pour votre réponse rapide, mais hopen est un dictionnaire. Cela n'a donc pas fonctionné. J'ai résolu via l'édition de valeurs pour toutes les sommes. Cependant, je n'ai pas résolu comment réécrire pour ind in range (0, sjt): tot_dis [ind] = sum (dist [unop [ind], ophu [stz]]) ​​ensembles de contraintes.


Que diriez-vous de np.sum ([a [i] for i in range]) , juste un nouvel ensemble de []?


@hpaulj, c'est vrai, mais je ne vois pas l'avantage de NumPy dans ce cas .. n'est-ce pas? Il peut être légèrement plus efficace de créer une liste (pour les petits itérables) car l'itération des générateurs est coûteuse, mais la différence de performance est souvent marginale.



1
votes

J'ai trouvé une solution alternative à celle de jpp. Si vous souhaitez conserver le de numpy import * , vous pouvez affecter l'objet intégré à une variable différente avant d'importer numpy, comme indiqué ici .

Dans votre cas particulier, vous avez deux choix:

  1. Importez le module intégré:

    import builtins pour Python 3, ou import __builtin__ pour Python 2. Et vous appelez soit builtins.sum (hopen [i] * fixedCost for i in Fset) ou __builtin __. Sum (hopen [i] * fixedCost for i in Fset) .

  2. Attribuez la somme intégrée à une variable différente avant d'importer numpy:

    bltin_sum = somme

    depuis numpy import *

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

J'ai déjà vérifié que la somme intégrée se comporte également comme prévu pour les tableaux numpy.


0 commentaires

1
votes

Tout ce que vous avez à faire est d'utiliser sum au lieu de np.sum . J'ai rencontré le même problème. L'avertissement a disparu après que je suis passé à la somme intégrée.

Vous n'avez pas besoin d'effectuer d'importations spéciales ni d'attribuer quoi que ce soit.


0 commentaires