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);
end
SC = SC(:,:,:);
Do I have to include the for loop or is there a way to extract the matrix all at once?

 Akzeptierte Antwort

Matt J
Matt J am 7 Jun. 2020
Bearbeitet: Matt J am 7 Jun. 2020

0 Stimmen

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.
B=repmat({sparse(true(n))},1,m);
idx=blkdiag(B{:});
SC=reshape( matrix(idx) ,n,n,[]);

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by