Есть ли лучший способ сделать numpy.argmin () игнорировать значения NAN
Вопрос
Я хочу получить индекс минимального значения NaMpy Array, который содержит Nans, и я хочу, чтобы они игнорировали
>>> a = array([ nan, 2.5, 3., nan, 4., 5.])
>>> a
array([ NaN, 2.5, 3. , NaN, 4. , 5. ])
Если я бегу Аргмин, он возвращает индекс первого NAN
>>> a.argmin()
0
Я заменяю назы с Infs, а затем запустить аргмин
>>> a[isnan(a)] = Inf
>>> a
array([ Inf, 2.5, 3. , Inf, 4. , 5. ])
>>> a.argmin()
1
Моя дилемма следующая: Я бы предпочел не изменить назы, чтобы инфы и затем вернуться после того, как я закончу с аргмином (так как назы есть смысл позже в коде). Есть лучший способ сделать это?
Есть также вопрос о том, что должен быть результатом, если все исходные значения а. нан? В моей реализации ответ 0
Решение
Конечно! Использовать 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, проверить маскированные массивы.