【发布时间】:2012-12-17 13:10:31
【问题描述】:
我需要计算 n × n 矩阵中每个非对角线元素的平均值。下三角和上三角是多余的。这是我目前正在使用的代码:
A <- replicate(500, rnorm(500))
sapply(1:(nrow(A)-1), function(x) mean(A[row(A) == (col(A) - x)]))
这似乎有效,但不适用于更大的矩阵。我拥有的并不大,大约 2-5000^2,但即使有 1000^2,它所花费的时间也比我想要的要长:
A <- replicate(1000, rnorm(1000))
system.time(sapply(1:(nrow(A)-1), function(x) mean(A[row(A) == (col(A) - x)])))
> user system elapsed
> 26.662 4.846 31.494
有更聪明的方法吗?
edit 澄清一下,我想要每个对角线独立的平均值,例如为:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
我想要:
mean(c(1,2,3))
mean(c(1,2))
mean(1)
【问题讨论】: