Using a 3D matrix to avoid for loops
8 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Marleen van Dijk
el 7 de Jun. de 2020
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?
0 comentarios
Respuesta aceptada
Matt J
el 7 de Jun. de 2020
Editada: Matt J
el 7 de Jun. de 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.
B=repmat({sparse(true(n))},1,m);
idx=blkdiag(B{:});
SC=reshape( matrix(idx) ,n,n,[]);
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!