これは、新しいコードを要求することではなく、Rがそのような計算を行う方法についての詳細です。もちろん、効率を上げるためのあらゆる提案をします。ループの高速化R
のは、私はそうのようなスクリプトがあるとしましょう:
x=matrix(complex(1:10,1:10,imaginary = 1:10),ncol=2)
y=x+300
raw=list(x,y)
raw_complex = list(raw,raw,raw,raw)
それは複雑な行列のリストです。私は、それのうちの位相角を取得しようとしている:phase = atan(Im(x)/Re(x))
私の現在のコードは次のとおりです。
for (m in 1:length(raw_complex)){
for (n in 1:length(raw_complex[[m]])){
for (i in 1:dim(raw_complex[[m]][[n]])[1]){
for (j in 1:dim(raw_complex[[m]][[n]])[2]){
raw_complex[[m]][[n]][i,j]=(atan(Im(raw_complex[[m]][[n]][i,j])/Re(raw_complex[[m]][[n]][i,j])))
}}}}
私は、私が知っている、Rのforループを回避知っているが、概念的には、これはそれが容易になります私には何が起きているのか、礼儀正しいかサプリーかを見ることができます。
私の質問は、ループの繰り返しごとに、リストまたは行列全体を一度に1つずつ取り出すのではなく、メモリ内にコピーすることです。明らかに、私はRがすべての繰り返しをコピーするようにはしたくないでしょう。
私の実際のデータセットは、リストの各要素に95個のマトリックスを持つ4のリストを持っています。各マトリックスは145x901なので、私はこれをできるだけ速くしたいと思っています。
ああ、出力が複素数ではなく実数であればいいでしょう。私はatan()
の前にas.numeric()
を追加しようとしましたが、それは役に立たないようです。
ありがとうございます!
出力が複雑です。科学的ではありませんが、虚数部分は0 –