运行时警告:在np.exp(x**2)中遇到溢出

5 投票
2 回答
16788 浏览
提问于 2025-04-18 12:32

我需要计算 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')

不过,你这些数字是用来干嘛的呢?能不能不使用指数运算,而是用对数来处理?如果你能多说说你的问题,那会更有帮助。

撰写回答