【发布时间】:2012-06-04 21:22:34
【问题描述】:
有没有一种惯用的方法来比较两个将 NaN 视为彼此相等的 NumPy 数组(但不等于除 NaN 之外的任何东西other)。
例如,我希望以下两个数组比较相等:
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)))
但它很笨重并且会创建所有这些中间数组。
有没有一种方法可以让眼睛更轻松并更好地利用内存?
附:如果有帮助,已知数组具有相同的形状和 dtype。
【问题讨论】:
-
@DanielRoseman:我明白这一点。我有两种生成 NumPy 数组的方法,我需要知道它们是否生成了相同的数组。
-
你已经排除了this question的一个答案;你是否也排除了其他两个?
-
如果您正在使用当前的 git 提示来进行 numpy,则有一个
numpy.isclosefunction 接受equal_nan关键字参数(为了兼容性,默认为False)。不过,它对内存不是很友好。 -
如果不是比较相等但具有不同二进制表示(例如,0.0 和 -0.0)的数字,那么 memoryview(a0) == memoryview(a1) 会做到这一点..
-
@DSM:谢谢。它实际上可能适合我的用例。你介意把它写下来作为答案吗?
标签: python numpy comparison nan