float对象没有属性'__getitem__'

时间:2017-08-25 06:10:22

标签: python typeerror

代码

def entropy_cal(pos,neg):
    entropy_target=  -1 * ((pos)/(pos+neg) * math.log(((pos)/(pos+neg))[2])) + ((neg)/(pos+neg) * math.log(((neg)/(pos+neg))[2]))
    return entropy_target


def preprocessing():
#   print training
    attr_mean = []
    for i in range(0,7):
        attr_mean.append(np.average(training[:,i]))
    neg = 0; pos = 0
    for i in range(9999):
        if training[i,6] == 0:
            neg += 1
        else:
            pos += 1
    entropy_target = entropy_cal(pos, neg)

    return entropy_target, attr_mean

错误

File "q3.py", line 46, in preprocessing
    entropy_target = entropy_cal(pos, neg)

File "q3.py", line 31, in entropy_cal
    return -1 * ((pos)/(pos+neg) * math.log(((pos)/(pos+neg))[2])) + ((neg)/(pos+neg) * math.log(((neg)/(pos+neg))[2]))

TypeError: 'float' object has no attribute '__getitem__'

问题

返回变量“entropy_target”时,它会抛出上述错误。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

log base 2的语法是:

math.log(pos/(pos+neg), 2)

答案 1 :(得分:0)

def entropy_cal(pos,neg):
entropy_target=  -1 * ((pos)/(pos+neg) * math.log(((pos)/(pos+neg))[2])) + ((neg)/(pos+neg) * math.log(((neg)/(pos+neg))[2]))
return entropy_target

在上面的代码中,posneg是非字典值。您正尝试为非字典值执行getitem。这就是错误的原因。