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

1 Ansicht (letzte 30 Tage)
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!

Antworten (1)

Matt J
Matt J am 24 Mär. 2017
Bearbeitet: Matt J am 24 Mär. 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

Kategorien

Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by