C'è un modo migliore di fare numpy.argmin) ignorare i valori NaN (
Domanda
Voglio ottenere l'indice del valore minimo di una matrice che contiene NumPy NaNs e voglio li ignorate
>>> a = array([ nan, 2.5, 3., nan, 4., 5.])
>>> a
array([ NaN, 2.5, 3. , NaN, 4. , 5. ])
se corro argmin, restituisce l'indice del primo NaN
>>> a.argmin()
0
I sostituire NaNs con Infs e quindi eseguire argmin
>>> a[isnan(a)] = Inf
>>> a
array([ Inf, 2.5, 3. , Inf, 4. , 5. ])
>>> a.argmin()
1
Il mio dilemma è il seguente: preferirei non cambiare NaNs a Infs e poi di nuovo dopo che ho fatto con argmin (dal NaNs hanno un significato più avanti nel codice). C'è un modo migliore per fare questo?
V'è anche una questione di ciò che dovrebbe essere il risultato se tutti i valori originali di a sono NaN? Nella mia implementazione la risposta è 0
Soluzione
Certo! Uso nanargmin
:
import numpy as np
a = np.array([ np.nan, 2.5, 3., np.nan, 4., 5.])
print(np.nanargmin(a))
# 1
C'è anche nansum
, nanmax
, nanargmax
, e nanmin
,
In scipy.stats
, c'è nanmean
e nanmedian
.
Per ulteriori modi per ignorare nan
s, controllare mascherato array .