首页 > 解决方案 > 运行代码时出现以下错误 - TypeError: must be real number, not list

问题描述

这就是问题 :

您将获得一个列表列表,每个子列表的长度为 2 即 [[x,y],[p,q],[l,m]..[r,s]] 将其视为 n 的矩阵行和两列 a. 第一列 Y 将包含整数值 b。第二列将具有浮点值您的任务是找到 (,)=−1∗1Σℎ,(10()+(1−)10(1−)) 的值,这里 n 是矩阵中的行数例如:[[1, 0.4], [0, 0.5], [0, 0.9], [0, 0.3], [0, 0.6], [1, 0.1], [1, 0.9], [1, 0.8] ] 输出:0.4243099 -18⋅((1⋅10(0.4)+0⋅10(0.6))+(0⋅10(0.5)+1⋅10(0.5))+...+(1⋅10(0.8) )+0⋅10(0.2)))

我的代码 -

def compute_log_loss(A):
    Y = len(A)
    Ys = len(A[0])    
    l = 0

    for i in range(Y):
        for j in range(Ys):
            l += A[i]*math.log10(A[j]) + (1-A[i])*math.log10(1-A[j])
    loss=(-1*l)/Y
    print(loss)
A = [[1, 0.4], [0, 0.5], [0, 0.9], [0, 0.3], [0, 0.6], [1, 0.1], [1, 0.9], [1, 0.8]]
compute_log_loss(A)```

Im getting the following error :

TypeError                                 Traceback (most recent call last)
<ipython-input-97-bd3b5244f95b> in <module>
     17     print(loss)
     18 A = [[1, 0.4], [0, 0.5], [0, 0.9], [0, 0.3], [0, 0.6], [1, 0.1], [1, 0.9], [1, 0.8]]
---> 19 compute_log_loss(A)

<ipython-input-97-bd3b5244f95b> in compute_log_loss(A)
     13     for i in range(Y):
     14         for j in range(Ys):
---> 15             l += A[i]*math.log10(A[j]) + (1-A[i])*math.log10(1-A[j])
     16     loss=(-1*l)/Y
     17     print(loss)

TypeError: must be real number, not list

标签: listtypeerror

解决方案


A[i] is a list not an single element.
A = [[1, 0.4], [0, 0.5], [0, 0.9], [0, 0.3], [0, 0.6], [1, 0.1], [1, 0.9], [1, 0.8]]
A[0] =[1, 0.4]
A[0][0] =1
A[0][1] =0.4

推荐阅读