在单元测试中比较numpy浮点数组
怎么才能最好地实现一个单元测试,用来比较两个numpy的浮点数组呢?
我试过使用unittest.assertEqual(),但对浮点数组不管用,因为浮点数永远不可能完全相等。我不能用assertAlmostEqual,因为它是测试浮点数四舍五入后的相等性……
有没有人实现过类似的东西?
self.assertFloatArrayEqual(array1, array2, msg = "array are not equal")
谢谢!
3 个回答
1
有一个版本可以比较两个数组,当然这要求numpy数组要正常工作,也就是说它们需要有长度(len())并且可以用方括号来访问元素。关于四舍五入的误差,你可以定义一个范围(delta),不过我觉得这可能不适用于数组。
我想你可能需要自己实现一个。
8
试试这个
self.assertTrue(numpy.allclose(array1, array2, rtol=1e-05, atol=1e-08))
allclose
是 numpy 模块里的一个函数,它用来检查两个数组是否在一定的范围内是相同的。这个范围是通过相对误差和绝对误差来定义的。rtol
和 atol
是可选的参数,默认值就是上面提到的那些。
感谢 @DSM 的指正。
31
如果你已经在使用numpy了,那为什么不试试numpy自带的测试功能呢?
numpy.testing.assert_array_almost_equal
还有
numpy.testing.assert_array_almost_equal_nulp
这些功能也能很好地处理NaN(不是一个数字),检查数据的形状等等。