如何修复:RuntimeWarning:exp 中遇到溢出
在本文中,我们将讨论如何修复Python中 exp 中遇到的 RuntimeWarning: overflow。
使用 NumPy 库的exp()函数时会出现此警告 在使用太大的值时。此函数用于计算输入数组或元素(NumPy 的 0-D 数组)中所有元素的指数。
示例:描述警告的代码
Python3
import numpy as np
print(np.exp(789))
Python3
import numpy as np
x = 789
x = np.float128(x)
print(np.exp(x))
Python3
import numpy as np
cc = np.array([789, 0.34, -1234.1])
print(np.exp(cc))
Python3
import numpy as np
cc = np.array([789, 0.34, -1234.1], dtype=np.float128)
print(np.exp(cc))
Python3
import numpy as np
import warnings
# suppress warnings
warnings.filterwarnings('ignore')
x = 789
x = np.float128(x)
print(np.exp(x))
输出:
出现此警告是因为 NumPy 中可以使用的最大数据大小为 float64,其最大范围为 1.7976931348623157e+308。取对数后,它的值变为 709.782。对于任何大于此的值,都会生成警告。
让我们讨论解决此问题的方法。
方法一:使用float128
数据类型 float64 可以更改为 float128。
示例:修复警告的程序
Python3
import numpy as np
x = 789
x = np.float128(x)
print(np.exp(x))
输出:
对于 ndarray,您可以使用数组方法的 dtype 参数。
示例:在不使用 dtype 的情况下生成输出的程序
Python3
import numpy as np
cc = np.array([789, 0.34, -1234.1])
print(np.exp(cc))
输出:
示例:使用 dtype 修复警告
Python3
import numpy as np
cc = np.array([789, 0.34, -1234.1], dtype=np.float128)
print(np.exp(cc))
输出:
方法 2:使用 filterwarnings()
警告消息通常在提醒用户程序中的某些条件有用的情况下发出,其中该条件(通常)不保证引发异常并终止程序。为了处理警告,有一个称为警告的内置模块。要阅读有关Python警告的更多信息,您可以查看这篇文章。
filterwarnings()函数可用于控制程序中警告的行为。警告过滤器控制警告是被忽略、显示还是变成错误(引发异常)。这可以使用不同的操作来完成:
- “忽略”从不打印匹配的警告
- “error”将匹配的警告变成异常
- “once”只打印第一次出现的匹配警告,无论位置如何
句法:
warnings.filterwarnings(action, message=”, category=Warning, module=”, lineno=0, append=False)
示例:使用 filterwarnings() 修复警告
Python3
import numpy as np
import warnings
# suppress warnings
warnings.filterwarnings('ignore')
x = 789
x = np.float128(x)
print(np.exp(x))
输出: