Question

Je veux obtenir l'indice de la valeur min d'un tableau numpy qui contient NaN et je veux les ignora

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

si je lance argmin, il renvoie l'index du premier NaN

>>> a.argmin()  
0  

Je remplace NaN avec Infs puis exécutez argmin

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

Mon dilemme est le suivant: Je préfère ne pas changer NaN à Infs, puis de nouveau après que je suis fait avec argmin (depuis NaN ont une signification plus tard dans le code). Y a-t-il une meilleure manière de faire cela?

Il y a aussi une question de ce qui devrait être le résultat si toutes les valeurs d'origine de sont NaN? Dans ma mise en œuvre, la réponse est 0

Était-ce utile?

La solution

Bien sûr! Utilisez nanargmin:

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

Il y a aussi nansum, nanmax, nanargmax et nanmin,

Dans scipy.stats, il y a nanmean et nanmedian.

Pour plus de moyens pour ignorer nans, consultez masqué tableaux .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top