加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:17:58 所属栏目:Python 来源:网络整理
导读: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)) 为什么这样的行为?这是一个错误还是打
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工作?

解决方法

从单元测试的文档 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

N.B:在unittest2中,assertAlmostEqual()首先测试两个对象是否相等,如果是,所以结果为yes,否则做魔术(几乎相等),这就是它工作的原因.它也应该在新的python版本(2.7>)中工作,因为它们中的大多数都实现了unittest2功能(我不确定这个,因为我的工作站中没有python 2.7>).

希望这可以帮助:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读