我本质上具有大小为n x n
的混淆矩阵,所有对角元素均为1
。
[对于每一行,我希望计算其平均值,不包括1
,即不包括对角线值。 numpy
中有一种简单的方法吗?
这是我当前的解决方案:
mask = np.zeros(cs.shape, dtype=bool)
np.fill_diagonal(mask, 1)
print(np.ma.masked_array(cs, mask).mean(axis=1))
其中cs
是我的n x n
矩阵
代码似乎很复杂,我当然觉得有一个更优雅的解决方案。
使用summation
的简洁形式-
(cs.sum(1)-1)/(cs.shape[1]-1)
对于忽略对角线元素的一般情况,请使用np.diag
代替1
偏移量-
(cs.sum(1)-np.diag(cs))/(cs.shape[1]-1)
[另一个有mean
-
n = cs.shape[1]
(cs.mean(1)-1./n)*(n/(n-1))
[另一个简单的主意是使用内置的numpy.average()
API,在此我们为混淆矩阵中的每个元素提供numpy.average()
以有助于平均值。通过将其权重设置为零,我们可以灵活地排除矩阵中的任何元素。下面是一个完整的示例:
weights