如何修复:true_divide 中遇到无效值


使用 NumPy 时可能遇到的一个警告是:

 RuntimeWarning : invalid value encountered in true_divide

当您尝试除以 NumPy 数组中的无效值(例如 NaN、Inf 等)时,会出现此警告。

应该注意的是,这只是一个警告,当尝试除以无效值时,NumPy 将仅返回 nan 值。

以下示例展示了如何在实践中响应此警告。

如何重现错误

假设我们尝试将一个 NumPy 数组的值除以另一个 NumPy 数组的值:

 import numpy as np

#define NumPy arrays
x = np. array ([4, 5, 5, 7, 0])
y = np. array ([2, 4, 6, 7, 0])

#divide the values in x by the values in y
n.p. divide (x,y)

array([2., 1.25, 0.8333, 1., no])

RuntimeWarning : invalid value encountered in true_divide

请注意,NumPy 将 x 的每个值除以 y 的相应值,但会产生RuntimeWarning

这是因为最后执行的除法运算是零除以零,结果是值nan

如何应对此警告

前面说过,这个RuntimeWarning只是一个警告,并不会阻止代码执行。

但是,如果您想抑制此类警告,可以使用以下语法:

 n.p. seterr (invalid=' ignore ')

这告诉 NumPy 隐藏任何包含“无效”消息的警告。

因此,如果我们再次运行代码,我们将不会收到任何警告:

 import numpy as np

#define NumPy arrays
x = np. array ([4, 5, 5, 7, 0])
y = np. array ([2, 4, 6, 7, 0])

#divide the values in x by the values in y
n.p. divide (x,y)

array([2., 1.25, 0.8333, 1., no])

输出的最后一个值仍然返回nan值,但这次没有显示警告消息。

其他资源

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

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

添加评论

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