Y at-il une meilleure façon de faire numpy.argmin () ignorer les valeurs NaN
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
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 nan
s, consultez masqué tableaux .