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

1 次查看(过去 30 天)
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!

回答(1 个)

Matt J
Matt J 2017-3-24
编辑:Matt J 2017-3-24
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

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by