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

Cob*_*bry 7 python unit-testing numpy python-2.7

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

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

有没有人实现这样的事情

self.assertFloatArrayEqual(array1, array2, msg = "array are not equal")
Run Code Online (Sandbox Code Playgroud)

谢谢

seb*_*erg 22

如果你还在使用numpy,为什么不使用numpy测试功能呢?

numpy.testing.assert_array_almost_equal
Run Code Online (Sandbox Code Playgroud)

numpy.testing.assert_array_almost_equal_nulp
Run Code Online (Sandbox Code Playgroud)

这些也处理NaN的精细,检查形状等.


Jan*_*Jan 8

尝试

self.assertTrue(numpy.allclose(array1, array2, rtol=1e-05, atol=1e-08))
Run Code Online (Sandbox Code Playgroud)

allclose来自numpy模块的函数检查两个数组是否相同机器精度给定的相对和绝对容差.rtol并且atol是具有上面给出的默认值的可选参数.

感谢@DSM纠正我.

  • "在机器精度范围内":我希望你不要编写代码假设!在我的版本中,默认容差是`rtol = 1.e-5,atol = 1.e-8`,并且这与机器精度无关. (3认同)

Ulr*_*rdt 1

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

恐怕你得自己动手。