是否有一种惯用的方法来比较两个会将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。
如果您真的关心内存使用(例如,具有非常大的数组),则应使用numexpr,以下表达式将为您工作:
np.all(numexpr.evaluate('(a==b)|((a!=a)&(b!=b))'))
我已经在长度为3e8的大型数组上对其进行了测试,并且该代码在我的计算机上具有与以下相同的性能
np.all(a==b)
并使用相同数量的内存