Есть ли лучший способ сделать numpy.argmin() игнорировать значения NaN
Я хочу получить индекс минимального значения массива numpy, который содержит NaN, и я хочу, чтобы они игнорировались
>>> a = array([ nan, 2.5, 3., nan, 4., 5.])
>>> a
array([ NaN, 2.5, 3. , NaN, 4. , 5. ])
если я запускаю argmin, он возвращает индекс первого NaN
>>> a.argmin()
0
Я заменяю NaNs на Infs, а затем запускаю argmin
>>> a[isnan(a)] = Inf
>>> a
array([ Inf, 2.5, 3. , Inf, 4. , 5. ])
>>> a.argmin()
1
Моя дилемма заключается в следующем: Я бы предпочел не менять NaN на Infs, а затем вернуться после того, как я закончил с argmin (поскольку NaNs имеют смысл позже в коде). Есть лучший способ сделать это?
Существует также вопрос, что должно быть результатом, если все исходные значения a являются NaN? В моей реализации ответ 0
Ответы
Ответ 1
Конечно! Используйте nanargmin
:
import numpy as np
a = np.array([ np.nan, 2.5, 3., np.nan, 4., 5.])
print(np.nanargmin(a))
# 1
Существует также nansum
, nanmax
, nanargmax
и nanmin
,
В scipy.stats
есть nanmean
и nanmedian
.
Для получения дополнительных возможностей игнорировать nan
s, проверьте masked массивы.