如何比较忽略nans的numpy数组?

时间:2018-03-12 23:28:19

标签: python arrays numpy comparison

我需要比较两个numpy数组是否等于忽略nan值的所需精度 例如:

$_GET['days'];

应通过测试。
我已经尝试过使用numpy.all函数,但我知道它需要两个相同的数组,并且我需要有一些容差,因为浮点值可能略有不同。
我怎样才能做到这一点?

2 个答案:

答案 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.allclosenp.isnan

mask = ~(np.isnan(a) | np.isnan(b))
np.allclose(a[mask], b[mask])

这正确处理+/- inf并允许小的差异。绝对和相对容差可以指定为allclose的参数。