我想为我的应用程序进行一些单元测试,我需要比较两个数组。由于array.__eq__
返回一个新数组(所以TestCase.assertEqual
失败),断言相等的最佳方法是什么?
目前我正在使用
self.assertTrue((arr1 == arr2).all())
但我真的不喜欢它
答案 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)