我正在尝试用Python(3.7)编写以下公式:
但不幸的是我收到一个 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 变量求和?
如果
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)