如果遇到除零,则返回零值

时间:2014-04-17 09:30:10

标签: python numpy divide-by-zero

我有两个长度相同的列表ab。我想计算它们的比例之和:

c = np.sum(a/b)

当除以零时,如何在求和系数中得到零(0)值?

编辑:这里有几个我为我的案例测试的答案,但仍然会引发错误。可能我错过了一些东西。包含零元素的aray是counts

try:
    cnterr = (counts/np.mean(counts))*(((cnterr/counts)**2 + (meanerr/np.mean(counts))**2 ))**1/2
except ZeroDivisionError:
    cnterr = (counts/np.mean(counts))*(((meanerr/np.mean(counts))**2 ))**1/2

RuntimeWarning: divide by zero encountered in divide
cnterr = (counts/np.mean(counts))*(((cnterr/counts)**2 + (meanerr/np.mean(counts))**2 ))**1/2

还有np.where()

cnterr = np.where(counts != 0, ((counts/np.mean(counts))*(((cnterr/counts)**2 + (meanerr/np.mean(counts))**2 ))**1/2), 0)

提出同样的错误。

5 个答案:

答案 0 :(得分:3)

除了divide by 0

之外的值
sel = b != 0
c = np.sum(a[sel]/b[sel])

数组为float,您可能需要使用

sel = np.bitwise_not(np.isclose(b, 0))

更新

如果ab不是np.array,请在第一个中填写以下代码。

a = np.array(a)
b = np.array(b)

答案 1 :(得分:2)

c = np.where(b != 0, a/b, 0).sum()

请参阅:http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html

答案 2 :(得分:0)

这样可行,它会在列表中放置0,其中除以零:

c = np.sum([x/y if y else 0 for x,y in zip(a,b)])

或者@mskimm答案的变体。注意,首先需要将输入列表转换为numpy数组:

a=np.array(a)
b=np.array(b)
c=np.sum(a[b!=0]/b[b!=0])

答案 3 :(得分:0)

这应该有用。

c = []
for i, j in enumerate(a):
    if b[i] != 0:
        c += [j/b[i]]
    else:
        c += [0]

c = sum(c)

答案 4 :(得分:-1)

这也很简单:

c = 0 if 0 in b else sum(a/b)