什么是最好的方式来声明numpy.array平等?
我想为我的应用程序做一些unit testing,我需要比较两个数组。 由于array.__eq__
返回一个新的数组(所以TestCase.assertEqual
失败),什么是最好的方式来断言相等?
目前我正在使用
self.assertTrue((arr1 == arr2).all())
但是我不太喜欢它:\
检查numpy.testing
的断言函数,例如
assert_array_equal
对于浮点数组,相等性testing可能会失败, assert_almost_equal
更可靠。
更新
几个版本之前,numpy获得了assert_allclose
,这是我最喜欢的,因为它允许我们指定绝对误差和相对误差,并且不需要小数舍入作为接近度标准。
我认为(arr1 == arr2).all()
看起来不错。 但是你可以使用:
numpy.allclose(arr1, arr2)
但不完全相同。
另外一个,和你的例子几乎一样的是:
numpy.alltrue(arr1 == arr2)
请注意,scipy.array实际上是一个参考numpy.array。 这使得查找文档更容易。
我发现使用self.assertEqual(arr1.tolist(), arr2.tolist())
是比较数组与unittest最简单的方法。
我同意这不是最漂亮的解决scheme,它可能不是最快的,但是对于其余的testing用例来说,它可能更统一,你会得到所有的unittest错误描述,实现起来非常简单。
从Python 3.2开始,你可以使用assertSequenceEqual(array1.tolist(), array2.tolist())
。
这有附加值显示数组不同的确切项目。