我需要计算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平方公尺它花费的时间比我想:
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
是否有这样做的一个更聪明的方式?为了澄清,我想每个对角线的平均值是独立的,例如,为:
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)
很好的使用索引。我投这个票作为公认的答案,因为它说明了指数的强大程度。 –
谢谢你,但是你更清楚@JorisMeys;只有当你必须做一个_lot_和每秒十分之一秒的广告时,这种方法才值得额外复杂化。 –
这非常聪明 - 我必须通过索引生成来了解发生了什么。感谢您的回答 – blmoore