gpt4 book ai didi

python - 为什么 assertAlmostEqual(-inf,-inf) 会失败?

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:23 33 4
gpt4 key购买 nike

Numpy 的 log 方法为 log(0) 提供 -inf。这个值是可比较的:

>>> np.log(0) == np.log(0)
True

现在在单元测试中以下工作正常:

self.assertEqual(np.log(0),np.log(0))

但这失败了:

self.assertAlmostEqual(np.log(0),np.log(0))

为什么会有这样的行为?这是错误还是有意为之?如果需要,我如何检查两个浮点值是否几乎相等,同时对 -inf 也能正常工作?

最佳答案

来自 unittest 的文档 assertAlmostEqual(a, b)默认情况下等同于 round(a-b, 7) == 0。所以在你的情况下你有:

In [8]: np.log(0) - np.log(0)
Out[8]: nan

In [9]: round(np.log(0) - np.log(0), 7)
Out[9]: nan

In [11]: np.nan == 0
Out[11]: False

这就解释了为什么你的测试失败了。

要使其正常工作,请使用 unittest2这是一个例子:

import unittest2
import numpy as np

class Test_Assertions(unittest2.TestCase):
def test_float_inf(self):
self.assertAlmostEqual(float('inf'), float('inf'))

def test_numpy_inf(self):
self.assertAlmostEqual(np.log(0),np.log(0))


unittest2.main()

输出:

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

注意:在 unittest2 assertAlmostEqual() 中,首先测试两个对象是否相等,如果是,那么结果是是,否则执行魔术(几乎相等),这就是它起作用的原因。它也应该在新的 python 版本(2.7 >)中工作,因为它们中的大多数都实现了 unittest2 功能(我不确定这一点,因为我的工作站中没有 python 2.7 >)。

希望这可以帮助:)

关于python - 为什么 assertAlmostEqual(-inf,-inf) 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376853/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com