断言numpy.array平等的最好方法是什么?

时间:2010-07-21 19:18:49

标签: python unit-testing numpy

我想为我的应用程序进行一些单元测试,我需要比较两个数组。由于array.__eq__返回一个新数组(所以TestCase.assertEqual失败),断言相等的最佳方法是什么?

目前我正在使用

self.assertTrue((arr1 == arr2).all())

但我真的不喜欢它

8 个答案:

答案 0 :(得分:98)

检查numpy.testing中的断言函数,例如

assert_array_equal

对于浮点数组,相等性测试可能会失败,assert_almost_equal更可靠。

<强>更新

在几个版本之前,numpy获得assert_allclose,这是我最喜欢的,因为它允许我们指定绝对和相对误差,并且不需要十进制舍入作为贴近度标准。

答案 1 :(得分:20)

我认为(arr1 == arr2).all()看起来很不错。但你可以使用:

numpy.allclose(arr1, arr2)

但它并不完全相同。

另一种选择,几乎与你的例子相同:

numpy.alltrue(arr1 == arr2)

请注意,scipy.array实际上是一个引用numpy.array。这样可以更轻松地找到文档。

答案 2 :(得分:15)

我发现使用 self.assertEqual(arr1.tolist(), arr2.tolist()) 是将数组与单元测试进行比较的最简单方法。

我同意它不是最漂亮的解决方案,它可能不是最快的,但它可能在其他测试用例中更加统一,你得到所有单元测试错误描述及其& #39;实施起来非常简单。

答案 3 :(得分:5)

从Python 3.2开始,您可以使用assertSequenceEqual(array1.tolist(), array2.tolist())

这具有附加值,可以显示数组不同的确切项目。

答案 4 :(得分:2)

在我的测试中,我使用它:

try:
    numpy.testing.assert_array_equal(arr1, arr2)
    res = True
except AssertionError as err:
    res = False
    print (err)
self.assertTrue(res)

答案 5 :(得分:1)

self.assertTrue(np.array_equal(x, y, equal_nan=True))

equal_nan = True 如果你想 np.nan == np.nan 返回 True

或者您可以使用 numpy.allclose 与 torelance 进行比较。

答案 6 :(得分:0)

np.linalg.norm(arr1 - arr2) < 1e-6

答案 7 :(得分:0)

使用 numpy

numpy.array_equal(a, b)