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

StackOverflow https://stackoverflow.com/questions/2821072

  •  26-09-2019
  •  | 
  •  

Вопрос

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

Для более способов игнорировать nanS, проверить маскированные массивы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top