我需要比较两个numpy数组是否等于忽略nan值的所需精度 例如:
$_GET['days'];
应通过测试。
我已经尝试过使用numpy.all函数,但我知道它需要两个相同的数组,并且我需要有一些容差,因为浮点值可能略有不同。
我怎样才能做到这一点?
答案 0 :(得分:1)
整数数组
使用OPTIONS
屏蔽数组并与np.isfinite
进行比较:
np.array_equal
def array_nan_equal(a, b):
m = np.isfinite(a) & np.isfinite(b)
return np.array_equal(a[m], b[m])
请注意,如果您想要注明+/- assert array_nan_equal(
np.array([1, np.nan, 3, np.nan]), np.array([1, 2, 3, 4])
)
assert not array_nan_equal(
np.array([1, 4, 3, np.nan]), np.array([1, 2, 3, 4])
)
,可以按照@Paul Panzer的答案中的提示进行操作,并使用inf
代替m = ~(np.isnan(a) & np.isnan(b))
。< / p>
浮点阵列
对于花车,您需要在容差范围内进行比较,因此请将np.isfinite
替换为np.array_equal
:
np.allclose
def array_nan_close(a, b):
m = np.isfinite(a) & np.isfinite(b)
return np.allclose(a[m], b[m])
答案 1 :(得分:1)
使用np.allclose
和np.isnan
:
mask = ~(np.isnan(a) | np.isnan(b))
np.allclose(a[mask], b[mask])
这正确处理+/- inf
并允许小的差异。绝对和相对容差可以指定为allclose
的参数。