有没有更好的方法让 numpy.argmin() 忽略 NaN 值
Posted
技术标签:
【中文标题】有没有更好的方法让 numpy.argmin() 忽略 NaN 值【英文标题】:Is there a better way of making numpy.argmin() ignore NaN values 【发布时间】:2011-02-18 17:57:55 【问题描述】:我想获取包含 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 替换 NaN,然后运行 argmin
>>> a[isnan(a)] = Inf
>>> a
array([ Inf, 2.5, 3. , Inf, 4. , 5. ])
>>> a.argmin()
1
我的困境如下:我宁愿不要将 NaN 更改为 Infs,然后在我用完 argmin 后再返回(因为 NaN 稍后在代码中具有含义)。有一个更好的方法吗?
还有一个问题,如果a的所有原始值都是NaN,结果应该是什么?在我的实现中,答案是 0
【问题讨论】:
【参考方案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
。
For more ways 忽略nan
s,查看masked arrays。
【讨论】:
你不知道这让我多么高兴。以上是关于有没有更好的方法让 numpy.argmin() 忽略 NaN 值的主要内容,如果未能解决你的问题,请参考以下文章