微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

numpy数组与nan与标量的不等式比较

如何解决numpy数组与nan与标量的不等式比较

!=将NaN与非NaN值进行任何比较(除之外)将始终返回False:

>>> x < -1000
array([False, False, False,  True, False, False], dtype=bool)

因此,您可以简单地忽略数组中已经存在NaN的事实,然后执行以下操作:

>>> x[x < -1000] = np.nan
>>> x
array([ nan,   1.,   2.,  nan,  nan,   5.])

当我执行以上操作时,我没有看到任何警告,但是如果您确实需要远离NaN,则可以执行以下操作:

mask = ~np.isnan(x)
mask[mask] &= x[mask] < -1000
x[mask] = np.nan

解决方法

我试图将数组的成员设置为小于nan的阈值。这是QA / QC过程的一部分,传入数据可能已经具有nan插槽。

例如,我的阈值可能是-1000,因此我想在以下数组中将-3000设置为nan

x = np.array([np.nan,1.,2.,-3000.,np.nan,5.])

以下内容:

x[x < -1000.] = np.nan

产生正确的行为,但也会产生RuntimeWarning,但会产生禁用警告的开销

warnings.filterwarnings("ignore")
...
warnints.resetwarnings()

有点沉重,可能有点不安全。

尝试使用花式索引进行两次索引如下所示不会产生任何效果:

nonan = np.where(~np.isnan(x))[0]
x[nonan][x[nonan] < -1000.] = np.nan

我认为这是因为复制是由于整数索引或两次使用索引而产生的。

有谁有一个相对简单的解决方案?在此过程中使用带掩码的数组会很好,但是最终产品必须是ndarray,我不能介绍新的依赖项。谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。