断言 numpy.array 相等性的最佳方法是什么?

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

目前我在吸毒

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

但我真的不喜欢

80450 次浏览

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

numpy.allclose(arr1, arr2)

但这不完全一样。

另一个与你的例子几乎相同的选择是:

numpy.alltrue(arr1 == arr2)

注意,scypy.array 实际上是一个引用 numpy.array,这使得查找文档变得更加容易。

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

assert_array_equal

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

更新

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

我觉得这很有用 self.assertEqual(arr1.tolist(), arr2.tolist()) 是比较数组和单元测试最简单的方法。

我同意这不是最好的解决方案,也可能不是最快的,但是它可能与您的其他测试用例更加统一,您可以得到所有的单元测试错误描述,并且它实现起来非常简单。

由于 Python 3.2,您可以使用 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

或者你可以使用 笨笨的,差不多了与相关性进行比较。