【问题标题】:Comparing numpy float arrays in unit tests [duplicate]在单元测试中比较 numpy 浮点数组 [重复]
【发布时间】:2013-02-01 23:17:57
【问题描述】:

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

我尝试过 unittest.assertEqual() 但不适用于浮点数组,因为浮点数永远不会 100% 相等。我不能使用 assertAlmostEqual 因为它测试了 round(floats) 相等性......

有没有人实现过类似的东西

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

谢谢

【问题讨论】:

  • 不确定这是否对您有帮助,但为了比较浮点数,您是否尝试过类似 is 关键字的方法?
  • 我的问题Compare (assert equality of) two complex data structures containing numpy arrays in unittest 的答案可能对你有用(虽然可能不是真的重复)。
  • 使用“is”不是比较请求的近似相等,而是比较身份。平等和身份是两种截然不同的野兽!
  • 请注意写你的问题标题。你所拥有的意义微乎其微。如果你是具体的,人们更有可能看。

标签: python unit-testing numpy python-2.7


【解决方案1】:

如果您仍然使用 numpy,为什么不使用 numpy 测试功能?

numpy.testing.assert_array_almost_equal

numpy.testing.assert_array_almost_equal_nulp

这些也处理 NaN 的精细、检查形状等。

【讨论】:

    【解决方案2】:

    试试

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

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

    感谢@DSM 纠正我。

    【讨论】:

    • “在机器精度范围内”:我希望你写的代码不是假设的!在我的版本中,默认公差为rtol=1.e-5, atol=1.e-8,这与机器精度相差甚远。
    • 虽然我认为用于数组比较的 unittest 变体在发现差异时提供了更好的输出,但这仍然比滚动自己的要好得多。
    【解决方案3】:

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

    恐怕你得自己动手了。

    【讨论】:

    • 这就是我害怕的!还是谢谢你
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 2022-12-14
    • 2012-06-03
    • 2011-10-24
    • 2015-12-25
    • 2011-08-20
    相关资源
    最近更新 更多