除零误差:适用于不同类别的频率

时间:2017-10-27 16:00:40

标签: python python-2.7 python-3.x divide-by-zero

我正在计算3个不同类别的频率,其中三个值为0-2。我想获得中位频率加权来平衡不平衡的班级数。

division by zero error

但是,我在输出中得到 /home/.../med.py:39: RuntimeWarning: divide by zero encountered in double_scalars try:w0=round(median_/(cl0/sum_),4) # EAFP /home/.../med.py:41: RuntimeWarning: divide by zero encountered in double_scalars try:w1=round(median_/(cl1/sum_),4) # EAFP /home/.../med.py:43: RuntimeWarning: divide by zero encountered in double_scalars try:w2=round(median_/(cl2/sum_),4) # EAFP 65298 238 0 238.0 [inf, inf, inf] 65162 374 0 374.0 [inf, inf, inf] 64985 551 0 551.0 [inf, inf, inf] 64712 690 134 690.0 . . .

{{1}}

有人可以指导吗?我不知道是什么原因?

1 个答案:

答案 0 :(得分:0)

exception ZeroDivisionError
Raised when the second argument of a division or modulo operation is zero. The associated value is a string indicating the type of the operands and the operation.


如果我很好地理解基于异常描述的内容,那么它不会经历异常,因为计算是在函数内发生的,因此应该在其中处理触发的异常(在这种情况下是round函数。当函数完成时,传递的结果是inf。 再次ZeroDivisionError检查除法的第二个参数是零,而不是结果是inf。希望我能提供帮助。

cl1=np.count_nonzero(im == 1)   #1=class 1,   
cl2=np.count_nonzero(im == 2)   #2=class 2,
cl0=65536-(cl1+cl2)
sum_=cl0+cl1+cl2
median_=np.median([cl0,cl1,cl2])
print cl0,cl1,cl2
print median_
try:
    div = median_/(cl0/sum_) 
except ZeroDivisionError: 
    w0=0
else:
    w0=round(median_/(cl0/sum_),4)