J'ai une fonction pour les problèmes statistiques:
import numpy as np
from scipy.special import gamma as Gamma
def Foo(xdata):
...
return x1 * (
( #R is a numpy vector
( ((R - x2)/beta) ** (x3 -1) ) *
( np.exp( - ((R - x2) / x4) ) ) /
( x4 * Gamma(x3))
).real
)
Parfois, je reçois du Shell l'avertissement suivant:
RuntimeWarning: divide by zero encountered in...
J'utilise la fonction numpy isinf
pour corriger les résultats de la fonction dans d'autres fichiers, donc je n'ai pas besoin de cet avertissement.
Existe-t-il un moyen d'ignorer le message? En d'autres termes, je ne veux pas que le Shell imprime ce message.
Je ne veux pas désactiver tous les avertissements python, juste celui-ci.
Vous pouvez désactiver l'avertissement avec numpy.seterr
. Mettez ceci avant la division possible par zéro:
np.seterr(divide='ignore')
Cela désactivera les avertissements de division zéro à l'échelle mondiale. Si vous souhaitez simplement les désactiver un peu, vous pouvez utiliser numpy.errstate
dans une clause with
:
with np.errstate(divide='ignore'):
# some code here
Pour une division zéro par zéro (indéterminée, donne un NaN), le comportement d'erreur a changé avec numpy version 1.12.0: ceci est maintenant considéré comme "invalide", alors qu'il était auparavant "diviser".
Ainsi, s'il y a une chance que votre numérateur soit également nul, utilisez
np.seterr(divide='ignore', invalid='ignore')
ou
with np.errstate(divide='ignore', invalid='ignore'):
# some code here
Voir la section "Compatibilité" dans les notes de version , dernier paragraphe avant la section "Nouvelles fonctionnalités":
La comparaison des nombres à virgule flottante NaN déclenche désormais un avertissement d'exécution non valide. Si un NaN est attendu, l'avertissement peut être ignoré à l'aide de np.errstate.
Vous pouvez également utiliser numpy.divide
pour la division. De cette façon, vous n'avez pas à désactiver explicitement les avertissements.
In [725]: np.divide(2, 0)
Out[725]: 0