有没有更好的方法让 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

还有nansumnanmaxnanargmaxnanmin

scipy.stats 中,有nanmeannanmedian

For more ways 忽略nans,查看masked arrays。

【讨论】:

你不知道这让我多么高兴。

以上是关于有没有更好的方法让 numpy.argmin() 忽略 NaN 值的主要内容,如果未能解决你的问题,请参考以下文章

有没有更好的方法让这段代码线程安全? Thread_local static 似乎是一个生硬的工具

如何让 UILabel 更好地调整大小?

我怎样才能让它变得更好?

有没有更好的方法将元素水平居中? [复制]

有没有更好的方法在 swiftui 中实现抖动动画?

有没有比多个子查询更好的方法来获得这个,也许有更多的连接?