Python 在单元测试中比较numpy浮点数组
实现比较两个numpy浮点数组的unittest的最佳方法是什么 我尝试过unittest.assertEqual(),但对浮点数组不起作用,因为浮点永远不会100%相等。我不能使用AssertalPosteQual,因为它测试轮(浮动)相等性 有人雇用过这样的人吗Python 在单元测试中比较numpy浮点数组,python,unit-testing,numpy,python-2.7,Python,Unit Testing,Numpy,Python 2.7,实现比较两个numpy浮点数组的unittest的最佳方法是什么 我尝试过unittest.assertEqual(),但对浮点数组不起作用,因为浮点永远不会100%相等。我不能使用AssertalPosteQual,因为它测试轮(浮动)相等性 有人雇用过这样的人吗 self.assertFloatArrayEqual(array1, array2, msg = "array are not equal") 感谢有一个版本可以比较两个数组,当然这需要numpy数组正常工作,即它们有len()并
self.assertFloatArrayEqual(array1, array2, msg = "array are not equal")
感谢有一个版本可以比较两个数组,当然这需要numpy数组正常工作,即它们有len()并且允许方括号访问元素。现在,关于舍入误差,有可能定义一个delta或一个范围,您可以使用它,但我认为这不允许在数组上使用 恐怕你得自己动手了。试试看
self.assertTrue(numpy.allclose(array1, array2, rtol=1e-05, atol=1e-08))
numpy模块的allclose
功能检查两个阵列在给定的相对和绝对公差范围内的机器精度是否相同rtol
和atol
是可选参数,默认值如上所示
感谢@DSM纠正了我的错误。如果您仍在使用numpy,为什么不使用numpy测试功能呢
numpy.testing.assert_array_almost_equal
及
这些也可以处理NaN的罚款、检查形状等问题。不确定这是否对您有帮助,但为了比较浮动,您是否尝试过类似于
is
关键字的方法?我的问题的答案可能对您有用(但可能不是真正的重复)。使用“is”不是比较请求的近似相等,而是比较标识。平等和身份是两种截然不同的动物!请注意写你的题目。你所拥有的意义是微不足道的。如果你说得具体一点,人们更倾向于看。这就是我害怕的!无论如何,谢谢你“在机器精度范围内”:我希望你不是在假设那样写代码!在我的版本中,默认公差是rtol=1.e-5,atol=1.e-8
,这与机器精度相差甚远。虽然我认为用于阵列比较的unittest变体在发现差异时提供了更好的输出,但这仍然比自己滚动要好得多。
numpy.testing.assert_array_almost_equal_nulp