2つの非常に大きな行列(60x25000)があり、2つの行列間の列間の相関関係を計算したいと思います。例えば:小さい行列の場合matlabの列ごとの相関関係を計算する方法は簡単です
corrVal(1) = corr(mat1(:,1), mat2(:,1);
corrVal(2) = corr(mat1(:,2), mat2(:,2);
...
corrVal(i) = corr(mat1(:,i), mat2(:,i);
は、私は単純に使用することができます。
colCorr = diag(corr(mat1, mat2));
が、私はメモリが不足すると、これは非常に大きな行列では動作しません。相関関係を計算して結果を結合するために行列をスライスすることを検討しましたが、実際には興味がない列の組み合わせ間の相関を計算するのは無駄です。
興味のあるものを直接計算する方法はありますか?
編集:私は、過去にループを使用しましたが、そのわずかな方法は、遅くする:
はmat1 = rand(60,5000);
mat2 = rand(60,5000);
nCol = size(mat1,2);
corrVal = zeros(nCol,1);
tic;
for i = 1:nCol
corrVal(i) = corr(mat1(:,i), mat2(:,i));
end
toc;
これは〜1秒
tic;
corrVal = diag(corr(mat1,mat2));
toc;
これはとり〜0.2秒
かかります
あなたの投稿を編集しました。それが正しいかどうか確認してください。 – Jacob
また、明白なforループで何が問題になっていますか? – Jacob
編集が正しいです、ありがとう!また、ループは遅くなる方法です – slayton