Existe uma maneira melhor de fazer numpy.argmin () ignorar os valores da nan
Pergunta
Eu quero obter o índice do valor mínimo de uma matriz numpy que contém Nans e eu quero que eles sejam ignorados
>>> a = array([ nan, 2.5, 3., nan, 4., 5.])
>>> a
array([ NaN, 2.5, 3. , NaN, 4. , 5. ])
Se eu correr argmin, ele retorna o índice da primeira nan
>>> a.argmin()
0
Eu substituo Nans pelo INFS e depois corro Argmin
>>> a[isnan(a)] = Inf
>>> a
array([ Inf, 2.5, 3. , Inf, 4. , 5. ])
>>> a.argmin()
1
Meu dilema é o seguinte: Prefiro não mudar de Nans para o INFS e depois voltar depois de terminar o Argmin (já que os Nans têm um significado mais tarde no código). Existe uma maneira melhor de fazer isso?
Há também uma questão de qual deve ser o resultado se todos os valores originais de uma são nan? Na minha implementação, a resposta é 0
Solução
Claro! Usar nanargmin
:
import numpy as np
a = np.array([ np.nan, 2.5, 3., np.nan, 4., 5.])
print(np.nanargmin(a))
# 1
Há também nansum
, nanmax
, nanargmax
, e nanmin
,
Dentro scipy.stats
, há nanmean
e nanmedian
.
Para mais maneiras ignorar nan
s, confira Matrizes mascaradas.