Während ich meinen Code ausführe, werden diese Warnungen immer sporadisch in Vierergruppen angezeigt. Ich habe versucht, die Quelle zu lokalisieren, indem ich Debug-Meldungen vor und nach bestimmten Anweisungen platziert habe, um ihren Ursprung genau zu bestimmen.
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Ist das eine Numpy-Warnung und was ist ein doppelter Skalar?
Von Numpy benutze ich
min(), argmin(), mean() and random.randn()
Ich benutze auch Matplotlib
Es sieht aus wie ein Gleitkomma-Berechnungsfehler. Überprüfen Sie die Funktion numpy.seterr , um weitere Informationen darüber zu erhalten, wo dies geschieht.
In meinem Fall stellte ich fest, dass es sich um eine Division durch Null handelte.
Manchmal erzeugen NaNs oder Nullwerte in Daten diesen Fehler bei Numpy. Wenn Sie beispielsweise Daten aus einer CSV-Datei oder Ähnlichem aufnehmen und dann die Daten mithilfe von Numpy-Arrays verarbeiten, kann das Problem auf die Datenaufnahme zurückzuführen sein. Sie können versuchen, Ihrem Code einen kleinen Datensatz mit bekannten Werten zuzuweisen und zu prüfen, ob Sie das gleiche Ergebnis erhalten.
Ein Array mit der Größe Null, das an numpy.mean
Übergeben wird, löst diese Warnung aus (wie in mehreren Kommentaren angegeben).
Für einige andere Kandidaten:
median
löst diese Warnung auch bei Arrays mit der Größe Null aus.andere Kandidaten werfen diese Warnung nicht vor:
min,argmin
Beide werfen ValueError
auf ein leeres Arrayrandn
nimmt *arg
; using randn(*[])
gibt eine einzelne Zufallszahl zurückstd,var
Gibt nan
in einem leeren Array zurückIch bin auf ein ähnliches Problem gestoßen - Ungültiger Wert in ... Nachdem ich viel Zeit damit verbracht habe, herauszufinden, was diesen Fehler verursacht, glaube ich, dass es an NaN in meinem Datenframe lag. Sehen Sie sich das Arbeiten mit fehlenden Daten in Pandas an.
Keine == Keine Richtig
np.nan == np.nan Falsch
Wenn NaN nicht gleich NaN ist, wird dieser Fehler durch arithmetische Operationen wie Division und Multiplikation ausgelöst.
Einige Dinge, die Sie tun können, um dieses Problem zu vermeiden:
Verwenden Sie pd.set_option, um die Anzahl der Dezimalstellen festzulegen, die in Ihrer Analyse berücksichtigt werden sollen, damit eine unendliche Zahl kein ähnliches Problem auslöst - ('display.float_format', Lambda x: '% .3f'% x).
Verwenden Sie df.round (), um die Zahlen zu runden, damit Panda die verbleibenden Ziffern aus der Analyse entfernt. Und am wichtigsten,
Setzen Sie NaN auf Null. Df = df.fillna (0). Seien Sie vorsichtig, wenn das Füllen von NaN mit Null nicht für Ihre Datensätze gilt, da dadurch der Datensatz als Null behandelt wird und sich N im Mittelwert, Standard usw. ebenfalls ändert.
Wenn Sie mit CSV-Importen arbeiten, versuchen Sie, df.dropna () zu verwenden, um solche Warnungen oder Fehler zu vermeiden.
Dies ist mir aufgefallen, als ich np.var(np.array([]))
berechnet habe. np.var
teilt die Größe des Arrays, die in diesem Fall Null ist.