如何修复:运行时警告:double_scalars 中遇到无效值


您在 Python 中可能遇到的错误是:

 runtimewarning: invalid value encountered in double_scalars

当您尝试执行涉及极小或极大数字的数学运算并且 Python 只是生成 NaN 值作为结果时,就会出现此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们尝试使用两个 NumPy 数组执行以下数学运算:

 import numpy as np

#define two NumPy arrays
array1 = np. array ([[1100, 1050]])
array2 = np. array ([[1200, 4000]])

#perform complex mathematical operation
n.p. exp (-3*array1). sum () / np. exp (-3*array2). sum ()

RuntimeWarning: invalid value encountered in double_scalars

我们收到运行时警告,因为分母的结果非常接近于零。

这意味着除法问题的答案将非常大,Python 无法处理如此大的值。

如何修复错误

通常,修复此类错误的方法是使用另一个 Python 库中的特殊函数,该函数可以处理计算中极小或极大的值。

在这种情况下,我们可以使用 SciPy 库中的logsumexp()函数:

 import numpy as np
from scipy. special import logsumexp

#define two NumPy arrays
array1 = np. array ([[1100, 1050]])
array2 = np. array ([[1200, 4000]])

#perform complex mathematical operation
n.p. exp (logsumexp(-3*array1) - logsumexp(-3*array2))

2.7071782767869983e+195

请注意,结果非常大,但我们没有收到任何错误,因为我们使用了 SciPy 库中专门用于处理这些类型数字的特殊数学函数。

在许多情况下,值得在SciPy 库中寻找可以处理极端数学运算的特殊函数,因为这些函数是专门为科学计算而设计的。

注意:您可以在此处找到logsumexp()函数的完整在线文档。

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复 Pandas 中的 KeyError
如何修复:ValueError:无法将 float NaN 转换为 int
如何修复:ValueError:操作数无法与形状一起广播

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注