每行非对角线元素的平均值 numpy

Olo*_*ari 8 python numpy mean confusion-matrix numpy-ndarray

我本质上有一个大小为 的混淆矩阵,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))
Run Code Online (Sandbox Code Playgroud)

cs我的n x n矩阵在哪里

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

Div*_*kar 6

简洁的使用summation-

(cs.sum(1)-1)/(cs.shape[1]-1)
Run Code Online (Sandbox Code Playgroud)

对于忽略对角线元素的一般情况,请使用np.diag代替1偏移 -

(cs.sum(1)-np.diag(cs))/(cs.shape[1]-1)
Run Code Online (Sandbox Code Playgroud)

另一个与mean-

n = cs.shape[1]
(cs.mean(1)-1./n)*(n/(n-1))
Run Code Online (Sandbox Code Playgroud)