遇到除零时返回零值

2 投票
5 回答
1725 浏览
提问于 2025-04-18 03:06

我有两个长度相同的列表,分别叫做 ab。我想计算它们的比值之和:

c = np.sum(a/b)

但是当出现除以零的情况时,我该如何在求和的结果中得到一个零(0)的值呢?

补充说明:我测试了一些方法来解决这个问题,但还是出现了错误。可能是我漏掉了什么。包含零元素的数组是 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 个回答

-1

这也很简单:

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

这应该可以正常工作。

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

c = sum(c)
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])
2
c = np.where(b != 0, a/b, 0).sum()

查看这个链接: http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html

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)

撰写回答