将除以零解释为 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.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]]