平均对角线减一
mean diagonal minus one
是否可以计算矩阵对角线下的对角线的平均值?
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的平均值
有可能
mean(m[col(m) == (row(m) - 1)])
## [1] 3.5
这里的想法是获取列和行索引,然后 select 仅当 column == row - 1 时的值(就在对角线下方)对角线是 col == row)
数据
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")))
是的。我认为(一如既往地在 R 中)有多种方法可以做到这一点,但这里有一种。它使用 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")))
是否可以计算矩阵对角线下的对角线的平均值?
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的平均值
有可能
mean(m[col(m) == (row(m) - 1)])
## [1] 3.5
这里的想法是获取列和行索引,然后 select 仅当 column == row - 1 时的值(就在对角线下方)对角线是 col == row)
数据
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")))
是的。我认为(一如既往地在 R 中)有多种方法可以做到这一点,但这里有一种。它使用 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")))