Alternative for unefficient code using corrcoef in a for-loop
2 views (last 30 days)
Show older comments
Dear specialists, I have the following problem. The matrix G is a cross-realization cross-correlation matrix. It is calculated from correlation coefficients of large (~200,000 dimensional) vectors. G is symmetric, which is being accounted for by the if-loop. The following code seems to be very inefficient, as I know that for-loops are normally not the best method in MATLAB. However, I could not come up with an idea how to make it more efficient, so far. Maybe, one of you can give me a hint.
Best regards
Florian
G=zeros(nc*K);
for l=1:K
for m=1:K
if l<=m
for i=1:nc
for j=1:nc
[R,P]=corrcoef(x(l,i,:),x(m,j,:));
G((l-1)*nc+i,(m-1)*nc+j)=R(1,2);
end
end
else
G((l-1)*nc+1:l*nc,(m-1)*nc+1:m*nc)=G((m-1)*nc+1:m*nc,(l-1)*nc+1:l*nc)';
end
end
end
Definition of x:
for i=1:nc
x(l,i,:)=double(reshape(nii.img(:,:,:,i),s,1));
end
where nii.img are three-dimensional images loaded in an earlier step. s here is ~ 200,000. K and nc are ~50.
0 Comments
Answers (0)
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!