Pregunta

Quiero obtener el índice del valor mínimo de una matriz que contiene numpy NaNs y quiero que ignoran

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

si funciono argmin, devuelve el índice del primer NaN

>>> a.argmin()  
0  

Me sustituir NaNs con Infs y ejecute argmin

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

Mi dilema es el siguiente: preferiría no cambiar NaNs a Infs y luego de nuevo después de que estoy hecho con argmin (ya NaNs tienen un significado más adelante en el código). ¿Hay una mejor manera de hacer esto?

También hay una cuestión de lo que debería ser el resultado si todos los valores originales de a son NaN? En mi aplicación la respuesta es 0

¿Fue útil?

Solución

Por supuesto! Uso nanargmin:

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

También hay nansum, nanmax, nanargmax y nanmin,

En scipy.stats, hay nanmean y nanmedian.

Para más formas de ignorar nans, echa un vistazo a enmascarado matrices .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top