如何修复:在 true_divide 中遇到无效值
在本文中,我们将修复Python中 true_divide 中遇到的无效值。 true_divide 中遇到的无效值是当我们在 NumPy 数组的元素之间执行无效除法运算时发生运行时警告。无效除法的示例之一是 0/0。
注意:由于它只是一个警告,代码不会停止执行并返回一个非数字值,即 nan(或)inf(无穷大)。
NumPy 数组之间的除法运算可以使用 NumPy 包中存在的divide()来完成,它允许在 2 个数组的对应元素之间进行除法运算。
Python3
# import necessary packages
import numpy as np
# Create 2 Numpy arrays
Array1 = np.array([6, 2, 0])
Array2 = np.array([3, 2, 0])
# divide the values in Array1 by the
# values in Array2
np.divide(Array1, Array2)
Python3
# import necessary packages
import numpy as np
# Create 2 Numpy arrays
Array1 = np.array([6, 2, 0])
Array2 = np.array([3, 2, 0])
# Supress/hide the warning
np.seterr(invalid='ignore')
# divide the values in Array1 by the
# values in Array2
np.divide(Array1, Array2)
输出:
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:9: RuntimeWarning: invalid value encountered in true_divide
if __name__ == ‘__main__’:
Result-array([ 2., 1., nan])
解释:
这里我们将 Array1 的元素除以 Array2 的元素。所以它返回商值。
- 6/3=2(有效操作)
- 2/2=1(有效操作)
- 0/0 这是一个无效操作,因此会引发警告并将结果作为非数字 (nan) 返回。
解决方案:
我们可以通过使用 seterr 方法来修复这个运行时警告,该方法将 invalid 作为参数并将 ignore 作为值分配给它。这样,它可以隐藏其中包含无效的警告消息。
Syntax: numpy.seterr(invalid=’ignore’)
Python3
# import necessary packages
import numpy as np
# Create 2 Numpy arrays
Array1 = np.array([6, 2, 0])
Array2 = np.array([3, 2, 0])
# Supress/hide the warning
np.seterr(invalid='ignore')
# divide the values in Array1 by the
# values in Array2
np.divide(Array1, Array2)
输出:
array([ 2., 1., nan])