有没有更好的方法让 numpy.argmin() 忽略 NaN 值

发布于 2024-08-31 22:48:42 字数 631 浏览 7 评论 0原文

我想获取包含 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

I want to get the index of the min value of a numpy array that contains NaNs and I want them ignored

>>> a = array([ nan,   2.5,   3.,  nan,   4.,   5.])  
>>> a  
array([ NaN,  2.5,  3. ,  NaN,  4. ,  5. ])  

if I run argmin, it returns the index of the first NaN

>>> a.argmin()  
0  

I substitute NaNs with Infs and then run argmin

>>> a[isnan(a)] = Inf  
>>> a  
array([ Inf,  2.5,  3. ,  Inf,  4. ,  5. ])  
>>> a.argmin()  
1  

My dilemma is the following: I'd rather not change NaNs to Infs and then back after I'm done with argmin (since NaNs have a meaning later on in the code). Is there a better way to do this?

There is also a question of what should the result be if all of the original values of a are NaN? In my implementation the answer is 0

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

舞袖。长 2024-09-07 22:48:45

当然!使用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

了解更多方法忽略 nans,查看屏蔽数组

Sure! Use nanargmin:

import numpy as np
a = np.array([ np.nan,   2.5,   3.,  np.nan,   4.,   5.])
print(np.nanargmin(a))
# 1

There is also nansum, nanmax, nanargmax, and nanmin,

In scipy.stats, there is nanmean and nanmedian.

For more ways to ignore nans, check out masked arrays.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文