我是python的新手,抱歉这个简单的问题。
在下面的代码中,我想计算指数,然后记录日志。
Y=numpy.log(1+numpy.exp(1000))
问题是,当我取710或更大数字的指数时,numpy.exp()函数返回' inf'即使我用64float打印它也会打印' inf'
有关此问题的任何帮助将不胜感激。
答案 0 :(得分:3)
您可以使用函数np.logaddexp()
执行此类操作。它计算logaddexp(x1, x2) == log(exp(x1) + exp(x2))
而不显式计算中间exp()
值。这可以避免溢出。自exp(0.0) == 1
起,您可以按预期计算np.logaddexp(0.0, 1000.0)
并获得1000.0
的结果。
答案 1 :(得分:1)
使用小数库:
>>> import numpy as np
>>> np.exp(1000)
inf
>>> from decimal import Decimal
>>> x = Decimal(1000)
>>> np.exp(x)
Decimal('1.970071114017046993888879352E+434')
答案 2 :(得分:1)
检查出来:
>>> x = numpy.exp(100)
>>> y = x+1
>>> y==x
True
所以即使使用100
(计算可以正确),添加1(甚至是非常大的数字),最低值也会被吸收,并且对添加没有任何影响。两个值都严格相等。
使用sys.float_info.epsilon
我测试过:
>>> numpy.log(1e20+numpy.exp(100))==numpy.log(numpy.exp(100))
True
>>> numpy.log(1e30+numpy.exp(100))==numpy.log(numpy.exp(100))
False
所以即使像1e20
这样的值被exp(100)
...
因此,即使有效,您也会得到1000.0
的结果。