运行时警告:在np.exp(x**2)中遇到溢出
我需要计算 exp(x**2)
,其中 x = numpy.arange(30,90)
。这会出现一个警告:
RuntimeWarning: overflow encountered in exp
inf
我不能安全地忽略这个警告,但使用SymPy或mpmath都不是解决办法,而且我需要进行数组操作,所以我希望能找到一个Numpy的解决方案。
有没有人知道该怎么处理这个问题?
2 个回答
3
我觉得你可以用这个方法来解决这个问题:
归一化
我用这个方法解决了问题。在使用这个方法之前,我的分类准确率是86%。使用这个方法后,我的分类准确率达到了96%!!!
太棒了!
首先:
最小-最大缩放
其次:
Z-score标准化
这些都是常见的实现 归一化
的方法。
我使用了第一个方法,并且对它进行了修改。把最大值除以10。
这样结果的最大值就是10。然后计算exp(-10)就不会出现 溢出
的情况了!
希望我的回答能帮到你!(^_^)
3
你可以使用一种能够满足你需求的数据类型,比如decimal.Decimal
:
>>> import numpy as np
>>> from decimal import Decimal
>>> x = np.arange(Decimal(30), Decimal(90))
>>> y = np.exp(x ** 2)
>>> y[-1]
Decimal('1.113246031563799750400684712E+3440')
不过,你这些数字是用来干嘛的呢?能不能不使用指数运算,而是用对数来处理?如果你能多说说你的问题,那会更有帮助。