2016-12-09 5 views
2

私は非常に時間がかかるので、私のコードを簡素化したいです。私の問題では、Rは4000だから、corr関数は16000000回以上コールする必要があります。私はこのコードを単純化できますか?Matlabのネストループを単純化するにはどうすればよいですか?

for i=1:R 

    for j=1:R 

     Red1 = Red1 + abs(corr (SelectedData,i,j)); 

    end 

end 

編集:だから、私はCORR機能は、私が書かれている、と言うべきで、それは二つの特徴間の相関を計算します。

、これが私のCORR関数である。ここでは

function corr = corr (X, i, j) 

    covariance = (cov((X(:,i)),(X(:,j)))); 

    corr = (covariance(1,2))/((sqrt(var(X(:,i)))) * (sqrt(var(X(:,j))))); 


end 
+0

まずあなたは間違った方法で 'correlation'機能を使用しているように、それが見えます。それ4つの引数を含む必要があります(5番目は必要ありません)。この[ドキュメント](https://www.mathworks.com/help/antenna/ref/correlation.html?searchHighlight=correlation&s_tid=doc_srchtitle)をご覧ください。 2番目の: 'correlation'は配列型の' i'と 'j'では使えないので、' arrayfun'や 'bsxfun'を使ってループを避けることができると思いますが、16m回は' correlation'を使わなければなりません(4000 * 4000)...しかし、私はここではわからない:) –

+0

あなたの返信に感謝@Mikhail_Sam; corrlation関数は私によって書かれた関数です。私は私の質問を編集しました。 –

+0

ああ、大丈夫です!組み込みの関数名を上書きしないように名前を変更することをお勧めします。コードを参照する必要があります。おそらく、アクションをベクトル化できます。 –

答えて

2

がベクトル化バージョンです:

C = cov(SelectedData); 
V = sqrt(diag(C)); 
VP2 = bsxfun(@times,V,V.'); 
CORR = C ./ VP2; 
Red1 = sum(abs(CORR(:))); 
+0

ありがとうございました。それは魅力のように機能します! –

+0

助けてくれたらうれしい! – rahnema1

関連する問題