每行numpy非对角元素的均值

问题描述 投票:2回答:2

我本质上具有大小为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矩阵

代码似乎很复杂,我当然觉得有一个更优雅的解决方案。

python numpy mean numpy-ndarray confusion-matrix
2个回答
2
投票

使用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))

1
投票

[另一个简单的主意是使用内置的numpy.average() API,在此我们为混淆矩阵中的每个元素提供numpy.average()以有助于平均值。通过将其权重设置为零,我们可以灵活地排除矩阵中的任何元素。下面是一个完整的示例:

weights
© www.soinside.com 2019 - 2024. All rights reserved.