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

14 投票
3 回答
10719 浏览
提问于 2025-04-17 16:09

怎么才能最好地实现一个单元测试,用来比较两个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 模块里的一个函数,它用来检查两个数组是否在一定的范围内是相同的。这个范围是通过相对误差和绝对误差来定义的。rtolatol 是可选的参数,默认值就是上面提到的那些。

感谢 @DSM 的指正。

31

如果你已经在使用numpy了,那为什么不试试numpy自带的测试功能呢?

numpy.testing.assert_array_almost_equal

还有

numpy.testing.assert_array_almost_equal_nulp

这些功能也能很好地处理NaN(不是一个数字),检查数据的形状等等。

撰写回答