我想得到包含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
我用Infs代替NaNs然后运行argmin
>>> a[isnan(a)] = Inf
>>> a
array([ Inf, 2.5, 3. , Inf, 4. , 5. ])
>>> a.argmin()
1
我的困境如下:我宁愿不将NaN更改为Infs,然后在完成argmin之后再回来(因为NaNs后来在代码中有意义)。有一个更好的方法吗?
还有一个问题是,如果 a 的所有原始值都是NaN,结果应该是什么?在我的实现中,答案是0
答案 0 :(得分:31)
当然!使用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
,请查看masked arrays。