小编典典

比较NumPy数组,以便NaN比较相等

python

是否有一种惯用的方法来比较两个会将NaN视为彼此相等(但不等于NaN以外的 其他值 )的NumPy数组。

例如,我希望以下两个数组比较相等:

np.array([1.0, np.NAN, 2.0])
np.array([1.0, np.NAN, 2.0])

和以下两个比较不相等的数组:

np.array([1.0, np.NAN, 2.0])
np.array([1.0, 0.0, 2.0])

我正在寻找一种可以产生标量布尔结果的方法。

可以做到以下几点:

np.all((a == b) | (np.isnan(a) & np.isnan(b)))

但是它很笨拙,会创建所有这些中间数组。

有没有一种方法在眼睛上更容易并且可以更好地利用内存?

PS如果有帮助,则已知数组具有相同的形状和dtype。


阅读 225

收藏
2020-12-20

共1个答案

小编典典

如果您真的关心内存使用(例如,具有非常大的数组),则应使用numexpr,以下表达式将为您工作:

np.all(numexpr.evaluate('(a==b)|((a!=a)&(b!=b))'))

我已经在长度为3e8的大型数组上对其进行了测试,并且该代码在我的计算机上具有与以下相同的性能

np.all(a==b)

并使用相同数量的内存

2020-12-20