我想为我的应用程序做一些单元测试,我需要比较两个数组。由于array.__eq__返回一个新数组(所以TestCase.assertEqual失败),Assert相等的最佳方法是什么?目前我正在使用
array.__eq__
TestCase.assertEqual
self.assertTrue((arr1 == arr2).all())
但我不喜欢
dz6r00yl1#
查看numpy.testing中的assert函数,例如:assert_array_equal对于浮点数组,相等性测试可能会失败,assert_almost_equal更可靠。
numpy.testing
assert_array_equal
assert_almost_equal
更新
在几个版本之前,numpy得到了assert_allclose,这是我现在最喜欢的,因为它允许我们指定绝对和相对误差,并且不需要小数舍入作为接近标准。
assert_allclose
vwoqyblh2#
我觉得(arr1 == arr2).all()看起来很不错。但您可以使用:用途:
(arr1 == arr2).all()
numpy.allclose(arr1, arr2)
但又不完全一样另一种选择,几乎与您的示例相同:
numpy.alltrue(arr1 == arr2)
注意scipy.array实际上是一个引用numpy.array。这使得更容易找到文档。
nafvub8i3#
我发现使用self.assertEqual(arr1.tolist(), arr2.tolist())是用unittest比较数组的最简单方法。我同意它不是最漂亮的解决方案,也可能不是最快的,但它可能与其他测试用例更一致,你可以得到所有的单元测试错误描述,而且它真的很容易实现。
self.assertEqual(arr1.tolist(), arr2.tolist())
mmvthczy4#
从Python 3.2开始,你可以使用assertSequenceEqual(array1.tolist(), array2.tolist())。这具有额外的价值,可以向您显示数组中不同的确切项。
assertSequenceEqual(array1.tolist(), array2.tolist())
camsedfj5#
self.assertTrue(np.array_equal(x, y, equal_nan=True))
equal_nan = True如果你想np.nan == np.nan返回True或者你可以使用numpy.allclose来与torelance进行比较。
equal_nan = True
np.nan == np.nan
True
dba5bblo6#
在我的测试中,我使用这个:
numpy.testing.assert_array_equal(arr1, arr2)
disbfnqx7#
使用numpy
numpy.array_equal(a, b)
4urapxun8#
np.linalg.norm(arr1 - arr2) < 1e-6
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。所以这是个错误
9条答案
按热度按时间dz6r00yl1#
查看
numpy.testing
中的assert函数,例如:assert_array_equal
对于浮点数组,相等性测试可能会失败,
assert_almost_equal
更可靠。更新
在几个版本之前,numpy得到了
assert_allclose
,这是我现在最喜欢的,因为它允许我们指定绝对和相对误差,并且不需要小数舍入作为接近标准。vwoqyblh2#
我觉得
(arr1 == arr2).all()
看起来很不错。但您可以使用:用途:但又不完全一样
另一种选择,几乎与您的示例相同:
注意scipy.array实际上是一个引用numpy.array。这使得更容易找到文档。
nafvub8i3#
我发现使用
self.assertEqual(arr1.tolist(), arr2.tolist())
是用unittest比较数组的最简单方法。我同意它不是最漂亮的解决方案,也可能不是最快的,但它可能与其他测试用例更一致,你可以得到所有的单元测试错误描述,而且它真的很容易实现。
mmvthczy4#
从Python 3.2开始,你可以使用
assertSequenceEqual(array1.tolist(), array2.tolist())
。这具有额外的价值,可以向您显示数组中不同的确切项。
camsedfj5#
equal_nan = True
如果你想np.nan == np.nan
返回True
或者你可以使用numpy.allclose来与torelance进行比较。
dba5bblo6#
在我的测试中,我使用这个:
disbfnqx7#
使用numpy
4urapxun8#
np.linalg.norm(arr1 - arr2) < 1e-6
jexiocij9#
使用Python 3.10.12,使用内置的unittest模块可以很好地处理嵌套数组(深度相等)
它会输出一个很好的失败消息。
基于您的问题的注解:如果你总是比较一个指向同一个数组的指针(或者修改数组,然后将其与自身进行比较),那么每次结果都会为true。所以这是个错误