2

a并且b是一维 numpy 数组(或 python 列表):

我正在这样做:

>>> c = [x/y for x,y in zip(a,b)]

偶尔b会有一个零 - 所以会发生除以零错误。

如何有条件地检查 0 值b并将相应元素设置c为 0?

4

4 回答 4

9

您可以在列表理解中使用if-else条件:

>>> c = [x/y if y else 0 for x,y in zip(a,b)]
于 2013-06-27T13:56:11.837 回答
8

您可以在列表推导中使用三元表达式

[x/y if y!= 0 else 0 for x,y in zip(a,b)]
于 2013-06-27T13:56:24.777 回答
2

似乎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.])
于 2013-06-27T14:04:43.570 回答
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       ])
于 2013-06-27T13:59:18.143 回答