Python 2.7 python中的Log base 2计算

Python 2.7 python中的Log base 2计算,python-2.7,Python 2.7,我试图计算ID树中的平均无序度。我的代码如下: Republican_yes = yes.count('Republican') Democrat_yes = yes.count('Democrat') Republican_no = no.count('Republican') Democrat_no = no.count('Democrat') Indep_yes = yes.count('Independent') Indep_no = no.count('Independent') d

我试图计算ID树中的平均无序度。我的代码如下:

Republican_yes = yes.count('Republican')
Democrat_yes = yes.count('Democrat')
Republican_no = no.count('Republican')
Democrat_no = no.count('Democrat')
Indep_yes = yes.count('Independent')
Indep_no = no.count('Independent')

disorder_yes= Republican_yes/len(yes)*(math.log(float(Republican_yes)/len(yes),2))+   Democrat_yes/len(yes)*(math.log(float(Democrat_yes)/len(yes),2))+Indep_yes/len(yes)*(math.log(float(Indep_yes)/len(yes),2))

disorder_no= Republican_no/len(no)*(math.log(float(Republican_no)/len(no),2))+Democrat_no/len(no)*(math.log(float(Democrat_no)/len(no),2))+Indep_no/len(no)*(math.log(float(Indep_no)/len(no),2))

avgdisorder = -len(yes)/(len(yes)+len(no))*disorder_yes - len(no)/(len(yes)+len(no))*disorder_no
返回avgdisorder


为什么我总是得到数学域错误?

检查长度是否为0,否则您将得到
MathError

if len(yes):
    disorder_yes= Republican_yes/len(yes)*(math.log(float(Republican_yes)/len(yes),2))+   Democrat_yes/len(yes)*(math.log(float(Democrat_yes)/len(yes),2))+Indep_yes/len(yes)*(math.log(float(Indep_yes)/len(yes),2))

if len(no):
    disorder_no= Republican_no/len(no)*(math.log(float(Republican_no)/len(no),2))+Democrat_no/len(no)*(math.log(float(Democrat_no)/len(no),2))+Indep_no/len(no)*(math.log(float(Indep_no)/len(no),2))

if len(yes) or len(no):
    avgdisorder = -len(yes)/(len(yes)+len(no))*disorder_yes - len(no)/(len(yes)+len(no))*disorder_no

如果需要,您可以根据自己的要求为所有3个
If
语句添加
else
子句。

您是否尝试过检查以确保所有变量值均为零?这是最可能的问题。谢谢!如何仅为公式选择非零值?