a
并且b
是一维 numpy 数组(或 python 列表):
我正在这样做:
>>> c = [x/y for x,y in zip(a,b)]
偶尔b
会有一个零 - 所以会发生除以零错误。
如何有条件地检查 0 值b
并将相应元素设置c
为 0?
您可以在列表理解中使用if-else
条件:
>>> c = [x/y if y else 0 for x,y in zip(a,b)]
您可以在列表推导中使用三元表达式:
[x/y if y!= 0 else 0 for x,y in zip(a,b)]
似乎numpy
默认情况下可以满足您的要求:
>>> a = np.array([1,2,3])
>>> b = np.array([0,1,3])
>>> a / b
array([0, 2, 1])
正如@Jaime 指出的那样,如果至少有一个array
是浮点类型,那么除以 0 会导致inf
,所以你需要这样做:
>>> a = np.array([1,2,3], dtype='float')
>>> b = np.array([0,1,3], dtype='float')
>>> c = a / b
>>> c
array([ inf, 2., 1.])
>>> c[c == np.inf] = 0
>>> c
array([ 0., 2., 1.])
旧语法:
[y and x/y or 0 for x, y in zip(a, b)]
新语法:
[x/y if y else 0 for x, y in zip(a, b)]
需要注意的是,numpy 自己完美地处理了这个问题:
numpy.arange(-3, 7, dtype='float') / numpy.arange(-5, 5, dtype='float')
array([ 0.6 , 0.5 , 0.33333333, -0. , -1. ,
inf, 3. , 2. , 1.66666667, 1.5 ])