我想获取包含NaN的numpy数组的最小值的索引,并且希望它们被忽略
>>> a = array([ nan, 2.5, 3., nan, 4., 5.])
>>> a
array([ NaN, 2.5, 3. , NaN, 4. , 5. ])
如果我运行argmin,它将返回第一个NaN的索引
>>> a.argmin()
0
我将NaN替换为Infs,然后运行argmin
>>> a[isnan(a)] = Inf
>>> a
array([ Inf, 2.5, 3. , Inf, 4. , 5. ])
>>> a.argmin()
1
我的难题是:我宁愿不将NaN更改为Infs,而是在用完argmin后再返回(因为NaN在代码中稍后有其含义)。有一个更好的方法吗?
还有一个问题,如果和的所有原始值均为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
。For more ways忽略
nan
, checkout masked arrays。