我正在计算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}}
有人可以指导吗?我不知道是什么原因?
答案 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)