在单元测试中比较numpy浮点数组

时间:2013-02-17 11:59:15

标签: python unit-testing numpy python-2.7

实现比较两个numpy浮点数组的unittest的最佳方法是什么。

我已经尝试过unittest.assertEqual()但是对于float数组不起作用,因为float永远不会100%相等。我不能使用assertAlmostEqual,因为它测试圆(浮点)相等...

是否有人实现了类似的东西

self.assertFloatArrayEqual(array1, array2, msg = "array are not equal")

感谢

3 个答案:

答案 0 :(得分:21)

如果你还在使用numpy,为什么不使用numpy测试函数?

numpy.testing.assert_array_almost_equal

numpy.testing.assert_array_almost_equal_nulp

这些也可以处理NaN的精细,检查形状等。

答案 1 :(得分:8)

尝试

self.assertTrue(numpy.allclose(array1, array2, rtol=1e-05, atol=1e-08))

来自numpy模块的allclose函数,检查两个数组在机器精度内是否相同,给定的相对和绝对容差。 rtolatol是可选参数,默认值如上所示。

感谢@DSM纠正我。

答案 2 :(得分:1)

有一个版本可以比较两个数组,这当然要求numpy数组的行为正确,即它们有一个len()并允许方括号访问元素。现在,关于舍入错误,可以定义一个delta或一个范围,你可以使用它,但我认为这不允许在数组上使用。

我担心你不得不自己动手。