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

War es hilfreich?

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 nans Besuche maskierten Arrays .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top