2016-03-25 10 views
6

Ich habe ein np.array mit über 330.000 Zeilen. Ich versuche einfach den Durchschnitt zu nehmen und es gibt NaN zurück. Selbst wenn ich versuche, mögliche NaN-Werte in meinem Array herauszufiltern (es sollte sowieso keine geben), gibt der Durchschnitt NaN zurück. Mache ich etwas völlig verrücktes?Durchschnitt von einem numpy Array gibt NaN zurück

Mein Code ist hier:

average(ngma_heat_daily) 
Out[70]: nan 

average(ngma_heat_daily[ngma_heat_daily != nan]) 
Out[71]: nan 

Antwort

5

try this:

>>> np.nanmean(ngma_heat_daily) 

Diese Funktion fällt NaN von Array-Werten vor den Mittelwert nehmen.

Edit: der Grund, dass average(ngma_heat_daily[ngma_heat_daily != nan]) nicht funktioniert, weil dieser ist:

>>> np.nan == np.nan 
False 

nach dem IEEE-Gleitkomma-Standard, ist NaN sich nicht gleich! Sie können dies tun, anstatt die gleiche Idee umzusetzen:

>>> average(ngma_heat_daily[~np.isnan(ngma_heat_daily)]) 

np.isnan, np.isinf und ähnliche Funktionen sind für diese Art der Datenmaskierung sehr nützlich.

+0

Das hat funktioniert! Kannst du erklären, was das Problem ist, wenn du nur den Durchschnitt nimmst? Ich habe noch ein Array von 16k-Einträgen (die aus der gleichen Quelle stammen), die mit der average() -Methode gut funktioniert haben. – Asif

+0

Nur Ihre Bearbeitung mit der Erklärung gesehen. Vielen Dank! – Asif

Verwandte Themen