最好的方法来Assertnumpy.array平等?

d4so4syb  于 2023-10-19  发布在  其他
关注(0)|答案(9)|浏览(96)

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

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

但我不喜欢

dz6r00yl

dz6r00yl1#

查看numpy.testing中的assert函数,例如:
assert_array_equal
对于浮点数组,相等性测试可能会失败,assert_almost_equal更可靠。

更新

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

vwoqyblh

vwoqyblh2#

我觉得(arr1 == arr2).all()看起来很不错。但您可以使用:用途:

numpy.allclose(arr1, arr2)

但又不完全一样
另一种选择,几乎与您的示例相同:

numpy.alltrue(arr1 == arr2)

注意scipy.array实际上是一个引用numpy.array。这使得更容易找到文档。

nafvub8i

nafvub8i3#

我发现使用self.assertEqual(arr1.tolist(), arr2.tolist())是用unittest比较数组的最简单方法。
我同意它不是最漂亮的解决方案,也可能不是最快的,但它可能与其他测试用例更一致,你可以得到所有的单元测试错误描述,而且它真的很容易实现。

mmvthczy

mmvthczy4#

从Python 3.2开始,你可以使用assertSequenceEqual(array1.tolist(), array2.tolist())
这具有额外的价值,可以向您显示数组中不同的确切项。

camsedfj

camsedfj5#

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

equal_nan = True如果你想np.nan == np.nan返回True
或者你可以使用numpy.allclose来与torelance进行比较。

dba5bblo

dba5bblo6#

在我的测试中,我使用这个:

numpy.testing.assert_array_equal(arr1, arr2)
disbfnqx

disbfnqx7#

使用numpy

numpy.array_equal(a, b)
4urapxun

4urapxun8#

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

jexiocij

jexiocij9#

使用Python 3.10.12,使用内置的unittest模块可以很好地处理嵌套数组(深度相等)

self.assertEqual([
    ["1","0","1","1","0","1","1"]
], [
    ["1","0","1","1","0","1","x"]
])

它会输出一个很好的失败消息。

First differing element 0:
['1', '0', '1', '1', '0', '1', '1']
['1', '0', '1', '1', '0', '1', 'x']

- [['1', '0', '1', '1', '0', '1', '1']]
?                                  ^

+ [['1', '0', '1', '1', '0', '1', 'x']]
?

基于您的问题的注解:如果你总是比较一个指向同一个数组的指针(或者修改数组,然后将其与自身进行比较),那么每次结果都会为true。所以这是个错误

相关问题