如何修复:runtimewarning: invalid value encountered in double_scalars
在这篇文章中,我们将讨论如何使用Python修复runtimewarning: invalid value encountered in double_scalars。
当我们使用Numpy库时,基本上会遇到的错误是Runtimewarning: invalid value encountered in doubled_scalars。当我们对一个非常大的数字列表进行数学运算或改变小数字时,以及当我们向NumPy运算提供任何无效的输入如NaN或null作为输入时,我们基本上会遇到这个错误。
这个错误仅仅发生在我们进行数学运算时,我们遇到的是无效的输入。当我们执行一些复杂的数学运算,需要一个非常大的数字或不同的小数字时,一些库不能处理这样的大数字,所以它抛出一个错误。它把这些数字变成了null或NaN,从而导致了操作的错误。
需要采取步骤来防止这个错误:
- 防止这个错误的最简单方法是使用能够处理这个大数字的函数,这样操作就不会出现错误。
- 或者用内置函数代替复杂的数学函数,这样我们就可以避免人为错误。
- 我们可以在操作中做一些数学上的改变,所以值不应该上升到超过值,这样就不会引发错误。
在这里,我们将看到一些引发错误的例子,并看到一些解决方案。
方法1:
显示错误代码的程序
# 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)
输出:
RuntimeWarning: Mean of empty slice.
RuntimeWarning: invalid value encountered in double_scalars
如果我们在计算数组的平均值之前检查它是否提供了有效的输入,我们可以解决这个错误。
语法:
if array1:
expression;
在这个程序中,我们演示了在double_scalars中遇到的错误输入课程无效值的情况。
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
方法2:使用numpy.special.logsumexp
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))) “的值。
语法: numpy.special.logsumexp(x)
例子:固定代码
# 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