遇到除零时返回零值
我有两个长度相同的列表,分别叫做 a
和 b
。我想计算它们的比值之和:
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))
更新
如果 a
和 b
不是 np.array
类型,请在开头写下以下代码。
a = np.array(a)
b = np.array(b)