2015-04-29 6 views
13

Ich habe eine Funktion für statistische Fragen:Ignorieren Division von 0 Warnung in Python

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 
       ) 

Manchmal habe ich aus der Schale die folgende Warnung:

RuntimeWarning: divide by zero encountered in... 

Ich verwende die numpy isinf Funktion zu korrigieren die Ergebnisse der Funktion in anderen Dateien, wo ich tun muss. also muss ich nicht warnen.

Es gibt eine Möglichkeit, die Nachricht zu ignorieren? Mit anderen Worten, ich möchte nicht, dass die Shell diese Nachricht druckt.

Ich möchte nicht alle Python-Warnung deaktivieren, nur diese.

+0

Sie könnten es einfach abfangen und ignorieren, wenn Sie sich nicht davon erholen müssen. – Carcigenicate

+0

Sie können immer 'try ... außer ZeroDivisionError' (oder was auch immer Fehler geworfen wird) – letsc

+3

mögliche Duplikate von [Wie Python Warnungen deaktivieren] (http://stackoverflow.com/questions/14463277/how-to-disable -python-warnings) – marsh

Antwort

32

Sie können die Warnung mit numpy.seterr deaktivieren. Setzen Sie dies vor der möglichen Division durch Null:

np.seterr(divide='ignore') 

Das wird Zero Division Warnungen global deaktivieren. Wenn Sie gerade sie für ein wenig deaktivieren möchten, können Sie numpy.errstate in einer with-Klausel verwenden:

with np.errstate(divide='ignore'): 
    # some code here 

Für eine Null durch Null Division (unbestimmt, zu einem NaN), das Fehlerverhalten geändert mit numpy Version 1.12.0: Dies wird nun als "ungültig" angesehen, während es vorher "teilen" war.

also wenn es eine Chance, dass Sie Ihre Zähler Null als auch sein könnte, benutzen Sie

np.seterr(divide='ignore', invalid='ignore') 

oder

with np.errstate(divide='ignore', invalid='ignore'): 
    # some code here 

Siehe „Kompatibilität“ in der release notes, letzter Absatz vor der Abschnitt "Neue Funktionen":

Beim Vergleich von NaN Gleitkommazahlen wird jetzt die ungültige Laufzeitwarnung angezeigt. Wenn ein NaN erwartet wird, kann die Warnung mit np.errestate ignoriert werden.

4

Sie können auch numpy.divide für die Division verwenden. Auf diese Weise müssen Warnungen nicht explizit deaktiviert werden.

In [725]: np.divide(2, 0) 
Out[725]: 0 
+2

danke. Das einzige ist, dass das Ergebnis nicht zurückkommt – overcomer