如何修复:运行时警告: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:操作数无法与形状一起广播