我想为我的应用程序做一些单元测试,我需要比较两个数组。由于 array.__eq__返回一个新的数组(因此 TestCase.assertEqual失败) ,那么什么是判断相等性的最佳方法呢?
array.__eq__
TestCase.assertEqual
目前我在吸毒
self.assertTrue((arr1 == arr2).all())
但我真的不喜欢
我认为 (arr1 == arr2).all()看起来很不错。但是你可以使用:
(arr1 == arr2).all()
numpy.allclose(arr1, arr2)
但这不完全一样。
另一个与你的例子几乎相同的选择是:
numpy.alltrue(arr1 == arr2)
注意,scypy.array 实际上是一个引用 numpy.array,这使得查找文档变得更加容易。
检查 numpy.testing中的断言函数,例如。
numpy.testing
assert_array_equal
对于浮点数组,相等性测试可能会失败,而 assert_almost_equal更可靠。
assert_almost_equal
更新
几个版本之前 numpy 获得了 assert_allclose,这是我现在最喜欢的,因为它允许我们指定绝对误差和相对误差,并且不需要十进制舍入作为接近标准。
assert_allclose
我觉得这很有用 self.assertEqual(arr1.tolist(), arr2.tolist()) 是比较数组和单元测试最简单的方法。
self.assertEqual(arr1.tolist(), arr2.tolist())
我同意这不是最好的解决方案,也可能不是最快的,但是它可能与您的其他测试用例更加统一,您可以得到所有的单元测试错误描述,并且它实现起来非常简单。
由于 Python 3.2,您可以使用 assertSequenceEqual(array1.tolist(), array2.tolist())。
assertSequenceEqual(array1.tolist(), array2.tolist())
这样做的附加价值是向您显示数组不同之处的确切项目。
在我的测试中,我使用这个:
numpy.testing.assert_array_equal(arr1, arr2)
np.linalg.norm(arr1 - arr2) < 1e-6
用麻醉剂
numpy.array_equal(a, b)
self.assertTrue(np.array_equal(x, y, equal_nan=True))
如果要 np.nan == np.nan返回 True,则返回 equal_nan = True
np.nan == np.nan
True
equal_nan = True
或者你可以使用 笨笨的,差不多了与相关性进行比较。