📜  如何修复:RuntimeWarning:exp 中遇到溢出

📅  最后修改于: 2022-05-13 01:55:16.999000             🧑  作者: Mango

如何修复: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))


输出:

输出是无穷大,因为 e^789 是一个非常大的值

出现此警告是因为 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))

输出:

使用 float128

对于 ndarray,您可以使用数组方法的 dtype 参数。

示例:在不使用 dtype 的情况下生成输出的程序

Python3

import numpy as np
  
cc = np.array([789, 0.34, -1234.1])
print(np.exp(cc))

输出:

不使用 dtype

示例:使用 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”只打印第一次出现的匹配警告,无论位置如何

句法:

示例:使用 filterwarnings() 修复警告

Python3

import numpy as np
import warnings
  
# suppress warnings
warnings.filterwarnings('ignore')
  
x = 789
x = np.float128(x)
print(np.exp(x))

输出:

使用过滤器警告()