之前接触到bincount这个函数,简单的以为它就是计算分类结果中每一类的数量,如下:
import numpy as np
a = np.array([0,1,3,2,1])
binc = np.bincount(a)
print(binc)
结果输出是这样:
[1 2 1 1]
这个结果表示0有1个,1有两个,2和3各有一个。
但是今天又发现了一个不为人知的巧妙用法,是在一篇论文的源码中发现的。直接看代码
#假设你总共要分3类,也可设为num_classes
prediction = np.array([0,1,1,2,0,1,2])
truth = np.array([0,1,2,2,0,1,1])
#上面两行假设是你的分类结果和真实分类
hist = np.zeros((3,3))#以类数为维数的矩阵
#定义一个函数,要注意label_pred和label_true都必须是np.array()
def _fast_hist(label_pred, label_true, num_classes):
mask = (label_true >= 0) & (label_true < num_classes)
hist = np.bincount( #这是我们要学习的bincount函数
num_classes * label_true[mask].astype(int) +
label_pred[mask], minlength=num_classes ** 2).reshape(num_classes, num_classes)#minlength属性规定了