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)
インデックスの良い使用。私は受け入れられた答えとしてこの1つに投票します。これは、どのように強力な指標ができるかを示しています。 –
ありがとうございますが、あなたの方がはっきりしています。@ JorisMeys;このアプローチは、_lot_と2番目の広告の10分の1を行う必要がある場合にのみ、余分な合併症の価値があります。 –
それは非常にスマートです - 何が起こっていたのかを理解するためにインデックス世代を作業しなければなりませんでした。答えが – blmoore