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
これを行うよりスマートな方法はありますか?
編集明確にするために、各対角線の平均を個別に取得したいと思います。たとえば、次の場合です。
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)