将除以零解释为 nan
Interpret division by zero as nan
我正在尝试将一个数组除以另一个数组,比方说
a = np.array([[2., 2., 2., 2., 2.], [2., 2., 2., 2., 2.]])
b = np.array([[20., 16., 0., 10., nan], [5., 4., nan, 2., 0.]])
np.divide(a,b)
将导致
array([[ 0.1 , 0.125, inf, 0.2 , nan],
[ 0.4 , 0.5 , nan, 1. , inf]])
并给我错误 RuntimeWarning: divide by zero encountered in true_divide,这不足为奇。
我试过了
try:
np.divide(a,b)
except ZeroDivisionError:
value = float('nan')
这没有用。 if 循环也不是解决方案:
if b != 0:
value = a / b
else:
value = float('nan')
给我错误 'The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()'。但是使用
if np.any(b != 0):
作为第一行,产生
array([[ 10. , 8. , 0. , 5. , nan],
[ 2.5, 2. , nan, 1. , 0. ]])
同样适用于
if np.all(b != 0):
我明白这一定是因为 np.any 只是 returns 布尔值 True 或 False。是否没有其他选项来替换
提出的 inf-values
np.divide(a,b)
并接受 RuntimeWarning?
您可以使用 numpy.isinf
将 inf
和 -inf
值替换为 np.nan
:
c = np.divide(a,b)
c[np.isinf(c)] = np.nan
print(c)
[[ 0.1 0.125 nan 0.2 nan]
[ 0.4 0.5 nan 1. nan]]
我正在尝试将一个数组除以另一个数组,比方说
a = np.array([[2., 2., 2., 2., 2.], [2., 2., 2., 2., 2.]])
b = np.array([[20., 16., 0., 10., nan], [5., 4., nan, 2., 0.]])
np.divide(a,b)
将导致
array([[ 0.1 , 0.125, inf, 0.2 , nan],
[ 0.4 , 0.5 , nan, 1. , inf]])
并给我错误 RuntimeWarning: divide by zero encountered in true_divide,这不足为奇。
我试过了
try:
np.divide(a,b)
except ZeroDivisionError:
value = float('nan')
这没有用。 if 循环也不是解决方案:
if b != 0:
value = a / b
else:
value = float('nan')
给我错误 'The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()'。但是使用
if np.any(b != 0):
作为第一行,产生
array([[ 10. , 8. , 0. , 5. , nan],
[ 2.5, 2. , nan, 1. , 0. ]])
同样适用于
if np.all(b != 0):
我明白这一定是因为 np.any 只是 returns 布尔值 True 或 False。是否没有其他选项来替换
提出的 inf-valuesnp.divide(a,b)
并接受 RuntimeWarning?
您可以使用 numpy.isinf
将 inf
和 -inf
值替换为 np.nan
:
c = np.divide(a,b)
c[np.isinf(c)] = np.nan
print(c)
[[ 0.1 0.125 nan 0.2 nan]
[ 0.4 0.5 nan 1. nan]]