【问题标题】:Interpret division by zero as nan将除以零解释为 nan
【发布时间】:2018-06-08 11:52:10
【问题描述】:

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

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

并接受 RuntimeWarning?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2016-02-09
      相关资源
      最近更新 更多