类型错误:“int”对象在 Python (3.7) 中不可调用

问题描述 投票:0回答:1

我正在尝试用Python(3.7)编写以下公式:

CBA formula

但不幸的是我收到一个 TypeError: 'int' object is not callable 。下面是我尝试运行的代码:

import numpy as np

##CBA
cm=np.array([[20,0,0],[1,14,0],[0,0,13]])
print(cm)

for i in range(3):
    a = cm[i,i]
    sum1 = cm[i,0]+cm[i,1]+cm[i,2]
    sum2 = cm[0,i] + cm[1,i] + cm[2,i]
    eq = ((a / max(sum1,sum2))/3)
    add = sum(eq)
    print(add)

错误如下:

 """
import numpy as np

##CBA
cm=np.array([[20,0,0],[1,14,0],[0,0,13]])
print(cm)

for i in range(3):
    a = cm[i,i]
    sum1 = cm[i,0]+cm[i,1]+cm[i,2]
    sum2 = cm[0,i] + cm[1,i] + cm[2,i]
    eq = ((a / max(sum1,sum2))/3)
    add = sum(eq)
    print(add)
[[20  0  0]
 [ 1 14  0]
 [ 0  0 13]]

Traceback (most recent call last):

  File "<ipython-input-1-72bf927660e0>", line 17, in <module>
    add = sum(eq)

TypeError: 'numpy.float64' object is not iterable

如何对 eq 变量求和?

python for-loop machine-learning svm confusion-matrix
1个回答
0
投票

如果

eq
只是一个变量(而不是数组),那么您根本不使用
sum
函数。你需要:

##CBA
cm=confusion_matrix(y_test,y_pred)

sumx = 0
for i in range(3):
    a = cm[i,i]
    sum1 = cm[i,0] + cm[i,1] + cm[i,2]
    sum2 = cm[0,i] + cm[1,i] + cm[2,i]
    sumx += ((a / max(sum1,sum2))/3)
print(sumx)
print(sumx/3)

但是,这还有很多潜在的改进空间。如果

cm
是一个 numpy 数组,那么你可以一次对一列或一行求和:

for i in range(3):
    a = cm[i,i]
    sum1 = np.sum(cm[i,:])
    sum2 = np.sum(cm[:,i])
    sumx += ((a / max(sum1,sum2))/3)
© www.soinside.com 2019 - 2024. All rights reserved.