Gibt es eine bessere Art und Weise zu machen numpy.argmin () ignorieren NaN-Werte
Frage
Ich möchte den Index des min-Wert eines numpy Array erhalten, die NaNs enthält, und ich möchte, dass sie ignoriert
>>> a = array([ nan, 2.5, 3., nan, 4., 5.])
>>> a
array([ NaN, 2.5, 3. , NaN, 4. , 5. ])
wenn ich argmin ausführen, gibt es den Index des ersten NaN
>>> a.argmin()
0
ich ersetzen NaNs mit Infs und führen argmin
>>> a[isnan(a)] = Inf
>>> a
array([ Inf, 2.5, 3. , Inf, 4. , 5. ])
>>> a.argmin()
1
Mein Dilemma ist die folgende: Ich möchte lieber nicht NaNs zu Infs ändern und dann wieder zurück, nachdem ich mit argmin fertig bin (seit NaNs eine Bedeutung haben später im Code). Gibt es einen besseren Weg, dies zu tun?
Es ist auch eine Frage dessen, was das Ergebnis sein, wenn alle ursprünglichen Werte von a NaN sind? In meiner Implementierung ist die Antwort 0
Lösung
Sie sicher! Verwendung nanargmin
:
import numpy as np
a = np.array([ np.nan, 2.5, 3., np.nan, 4., 5.])
print(np.nanargmin(a))
# 1
Es gibt auch nansum
, nanmax
, nanargmax
und nanmin
,
In scipy.stats
gibt es nanmean
und nanmedian
.
Weitere Möglichkeiten ignorieren nan
s Besuche maskierten Arrays .