将除以零除以纳

时间:2018-06-08 11:52:11

标签: python arrays numpy nan divide-by-zero

我试图将一个数组除以另一个数组,比如说

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-values
np.divide(a,b)

并接受RuntimeWarning?

1 个答案:

答案 0 :(得分:0)

您可以使用numpy.isinfinf-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]]