如何修复:runtimewarning:double_scalars 中遇到无效值
在本文中,我们将讨论如何修复运行时警告:使用Python在 double_scalars 中遇到的无效值。
我们在使用 Numpy 库时基本遇到的错误是 Runtimewarning: invalid value seen in doubled_scalars。当我们对一个非常大的数字列表进行数学运算或改变小数字时,以及当我们向 NumPy 操作提供任何无效输入(如 NaN 或 null 作为输入)时,我们基本上都会遇到这个错误。
当我们执行数学运算并且遇到无效的输入时,只会发生此错误。当我们执行一些需要非常大的数字或变化很小的数字的复杂数学运算时,某些库无法处理如此大的数字,因此会引发错误。它将这些数字变为 null 或 NaN,从而导致操作错误。
防止此错误的步骤需要:
- 防止此错误的最简单方法是使用能够处理该大数字的函数,这样操作就不会引发错误。
- 或者在地方或复杂的数学函数中使用内置函数,这样我们就可以避免人为错误。
- 我们可以在运算中做一些数学上的改变,这样值就不会超过值,这样就不会引发错误。
在这里,我们将看到一些引发错误的示例并查看一些解决方案。
方法一:使用 if
显示错误代码的程序
Python
# In this program we are demonstrating how wrong
# input course invalid value
# encountered in double_scalars
import numpy
array1 = [1, 2, 4, 7, 8]
# this input array causes error
array2 = []
Marray1 = numpy.mean(array1)
# this line causes the error
Marray2 = numpy.mean(array2)
print(Marray1)
print(Marray2)
Python
import numpy
array1 = [1, 2, 4, 7, 8]
# this input array causes error
array2 = []
# Here we check error
if array1 and array2:
print("Mean of the array 1 is : ", numpy.mean(array1))
print("Mean of the array is :", numpy.mean(array2))
else:
print("please Enter valid array")
Python
import numpy as np
from numpy import sinh
x = 900
y = 711
# This operation raise error
sol1 = np.log(np.sum(np.exp(x)))/np.log(np.sum(np.exp(y)))
print(sol1)
Python
# Python program showing
# invalid error encounter in double scaler
import numpy as np
from scipy.special import logsumexp
x = 900
y = 711
# Solution of the error with the
# help of built-in function
sol1 = logsumexp(x) - logsumexp(y)
# sol1 = np.log(np.sum(np.exp(x)))/np.log(np.sum(np.exp(y)))
print("Now we can print our Answer :")
print(sol1)
输出:
RuntimeWarning: Mean of empty slice.
RuntimeWarning: invalid value encountered in double_scalars
如果我们在计算提供有效输入 not 的数组的平均值之前检查数组,我们可以修复此错误:
Syntax:
if array1:
expression;
固定代码
在这个程序中,我们正在演示如何在 double_scalars 中遇到错误的输入当然无效值
Python
import numpy
array1 = [1, 2, 4, 7, 8]
# this input array causes error
array2 = []
# Here we check error
if array1 and array2:
print("Mean of the array 1 is : ", numpy.mean(array1))
print("Mean of the array is :", numpy.mean(array2))
else:
print("please Enter valid array")
输出:
please Enter valid array
方法二:使用 numpy.special.logsumexp
Python程序显示在双倍缩放器中遇到无效错误。
Python
import numpy as np
from numpy import sinh
x = 900
y = 711
# This operation raise error
sol1 = np.log(np.sum(np.exp(x)))/np.log(np.sum(np.exp(y)))
print(sol1)
输出:
main.py:14: RuntimeWarning: overflow encountered in exp
sol1 = np.log(np.sum(np.exp(x)))/np.log(np.sum(np.exp(y)));
main.py:14: RuntimeWarning: invalid value encountered in double_scalars
sol1 = np.log(np.sum(np.exp(x)))/np.log(np.sum(np.exp(y)));
nan
在这里,我们已经看到导致此错误的原因是 NumPy 库无法在如此复杂的结构上处理这么大的数字,因此我们必须使用一些可以处理小数字的内置函数。为此,我们使用 numpy.special.logsumexp函数来计算表达式“np.log(np.sum(np.exp(x)))”的值:
Syntax: numpy.special.logsumexp(x);
示例:固定代码
Python
# Python program showing
# invalid error encounter in double scaler
import numpy as np
from scipy.special import logsumexp
x = 900
y = 711
# Solution of the error with the
# help of built-in function
sol1 = logsumexp(x) - logsumexp(y)
# sol1 = np.log(np.sum(np.exp(x)))/np.log(np.sum(np.exp(y)))
print("Now we can print our Answer :")
print(sol1)
输出:
Now we can print our Answer :
189.0