Я хочу получить индекс минимального значения массива numpy, который содержит NaNs, и я хочу их проигнорированный
>>> 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
Моя дилемма следующая: я не изменил бы NaNs на Infs и затем обратно после того, как я сделан с argmin (так как NaNs имеют значение позже в коде). Существует ли лучший способ сделать это?
Существует также вопрос того, чем должен состоять в том результат, если всеми исходными значениями является NaN? В моей реализации ответ 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
ов читайте в masked arrays.