Python 3.7实现CBA公式遇TypeError,求eq变量正确求和方法
解决TypeError: 'numpy.float64' object is not iterable错误
问题根源:每次循环生成的eq是单个numpy.float64数值,但Python的sum()函数要求传入可迭代对象(比如列表、数组),直接对单个数值调用sum()就会触发这个错误。
修正方法一:列表收集后求和
先把每次循环得到的eq存入列表,循环结束后再对列表整体求和:
import numpy as np ##CBA cm=np.array([[20,0,0],[1,14,0],[0,0,13]]) print(cm) eq_list = [] 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) eq_list.append(eq) add = sum(eq_list) print(add)
修正方法二:numpy向量化运算(更高效)
利用numpy的数组操作替代循环,代码更简洁且性能更好:
import numpy as np cm=np.array([[20,0,0],[1,14,0],[0,0,13]]) print(cm) # 提取混淆矩阵对角线元素 diag_vals = np.diag(cm) # 计算每行的总和 row_totals = np.sum(cm, axis=1) # 计算每列的总和 col_totals = np.sum(cm, axis=0) # 取每行/列总和的最大值 max_totals = np.maximum(row_totals, col_totals) # 计算所有eq值的总和 total = np.sum((diag_vals / max_totals) / 3) print(total)
内容的提问来源于stack exchange,提问作者matth
相关产品推荐
相关产品推荐

