Есть ли лучший способ сделать numpy.argmin (), игнорируют значения NaN

Я хочу получить индекс минимального значения массива 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

16
задан Dragan Chupacabric 12 May 2010 в 17:07
поделиться

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ов читайте в masked arrays.

32
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: