Matrix indexing: fast way to compute covariance of N different MxL matrices that are saved in NxMxL matrix

1 view (last 30 days)
I have a NxMxL matrix called bigmatrix That I can split into N temporary submatrices. On each temporary submatrix I need to calculate the covariance. I do this in the following way:
for k=1:N
submatrix=squeeze(bigmatrix(k,:,:)).';
R=submatrix*submatrix';
end
The covariance is calculated really fast. My problem is loading the submatrix. This takes 6 seconds. Is there a faster way to do this? The matrix indexing is slowing me down a lot.
Thanks!

Answers (1)

Matt J
Matt J on 24 Mar 2017
Edited: Matt J on 24 Mar 2017
Using MTIMESX ( Download ), we can eliminate the loop altogether,
data=permute(bigmatrix,[2,3,1]);
R=mtimesx(data,'t',data);
If you build bigmatrix as MxLxN in the first place, you can avoid the overhead of permute(). Even without mtimesx, I expect an MxLxN data organization will accelerate your loop
for k=1:N
submatrix=data(:,:,k);
R=submatrix.'*submatrix;
end

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!