2010-05-12 11 views
14

chcę uzyskać indeks wartości min z numpy tablicy zawierającej Nans i chcę je zignorowałCzy istnieje lepszy sposób dokonywania numpy.argmin() zignorować NaN wartości

>>> a = array([ nan, 2.5, 3., nan, 4., 5.]) 
>>> a 
array([ NaN, 2.5, 3. , NaN, 4. , 5. ]) 

jeśli biegnę argmin, zwraca indeks pierwszego NaN

>>> a.argmin() 
0 

ja zastąpić Nans z plików INF, a następnie uruchomić argmin

>>> a[isnan(a)] = Inf 
>>> a 
array([ Inf, 2.5, 3. , Inf, 4. , 5. ]) 
>>> a.argmin() 
1 

Mój dylemat jest następujący: Wolałbym nie zmieniać NaNs na Infs, a potem wrócić po zakończeniu argmin (ponieważ NaN mają znaczenie później w kodzie). Czy jest lepszy sposób to zrobić?

Istnieje również pytanie, jaki powinien być wynik, jeśli wszystkie oryginalne wartości a są NaN? W mojej implementacji odpowiedź brzmi: 0

Odpowiedz

27

Pewnie! Użyj nanargmin:

import numpy as np 
a = np.array([ np.nan, 2.5, 3., np.nan, 4., 5.]) 
print(np.nanargmin(a)) 
# 1 

Istnieje również nansum, nanmax, nanargmax, a nanmin,

W scipy.stats istnieje nanmean i nanmedian.

For more ways zignorować nan s, sprawdzić masked arrays.

+0

Dziękuję ~ unutbu! –

+0

Nie masz pojęcia, jak bardzo mnie to cieszy. – weronika