我试图将一个数组除以另一个数组,比如说
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:在true_divide中遇到零除,这并不是一个大惊喜。
我试过
try:
np.divide(a,b)
except ZeroDivisionError:
value = float('nan')
哪个不起作用。 if-loop也不是解决方案:
if b != 0:
value = a / b
else:
value = float('nan')
给我错误'具有多个元素的数组的真值是不明确的。使用a.any()或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只返回一个布尔值True或False。是否没有其他选择来替换出现的
的inf-valuesnp.divide(a,b)
并接受RuntimeWarning?
答案 0 :(得分:0)
您可以使用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]]