Using a 3D matrix to avoid for loops
3 views (last 30 days)
I would like to speed up my code and avoid for loops. I want to extract smaller matrices which are placed along the diagonal of a bigger matrix and put those into an array. The code looks like this:
SC = zeros(m, n, n);
for i = 1:m
SC(i, 1:n, 1:n) = matrix(n*(i-1)+1:i*n, n*(i-1)+1:i*n);
SC = SC(:,:,:);
Do I have to include the for loop or is there a way to extract the matrix all at once?
Matt J on 7 Jun 2020
Edited: Matt J on 7 Jun 2020
First, your code should be faster if SC is nxnxm as opposed to mxnxn. That will make the memory accesses more contiguous. Assumig you accept this, then the following is a loop-free way to build SC.
SC=reshape( matrix(idx) ,n,n,);