2015-10-19 71 views
1

是否可以计算矩阵对角线下对角线的平均值?平均对角线减一个

a1 a2 a3 a4 a5 
a1 0 1 1 1 1 
a2 2 0 1 1 1 
a3 1 3 0 1 1 
a4 1 1 4 0 1 
a5 1 1 1 5 0 

我想计算的2 + 3 + 4 + 5

+0

是否总是在对角线一条线?还是应该推广? – Heroka

+0

可以概括为适用于上线或下线 –

回答

5

这里有一个可能性

mean(m[col(m) == (row(m) - 1)]) 
## [1] 3.5 

这里的想法是让列和行索引,然后只能选择平均列==行 - 1(恰好在对角线下方 - 对角线为col ==行


数据

m <- structure(c(0L, 2L, 1L, 1L, 1L, 1L, 0L, 3L, 1L, 1L, 1L, 1L, 0L, 
4L, 1L, 1L, 1L, 1L, 0L, 5L, 1L, 1L, 1L, 1L, 0L), .Dim = c(5L, 
5L), .Dimnames = list(c("a1", "a2", "a3", "a4", "a5"), c("a1", 
"a2", "a3", "a4", "a5"))) 
6

是。我认为(一如既往)有很多种方法可以做到,但这里有一个。它使用base-R中的diag函数,并在获取对角线并计算其平均值之前删除第一行和最后一列。

res <- mean(diag(mm[-1,-ncol(mm)])) 

使用的数据:

mm <- structure(c(0L, 2L, 1L, 1L, 1L, 1L, 0L, 3L, 1L, 1L, 1L, 1L, 0L, 
4L, 1L, 1L, 1L, 1L, 0L, 5L, 1L, 1L, 1L, 1L, 0L), .Dim = c(5L, 
5L), .Dimnames = list(c("a1", "a2", "a3", "a4", "a5"), c("a1", 
"a2", "a3", "a4", "a5")))