Efficient implementation for loops
Afficher commentaires plus anciens
I have a for loop which is slowing down the performance, which I'm sure there is a way to speed it up but I don't know how.
Suppose you have two matrices
A = randn(4,2,10); B = randn(2,10);
The result you want is C of dimension 4 * 10. In a for loop implementation, it is:
for i = 1 : 10
C(:,i) = A(:,:,i) * B(:,i)
end
How can I get C without using for loops?
Thanks in advance
Réponses (1)
Sean de Wolski
le 14 Juil 2015
Preallocating C will make this much faster:
Before the loop:
C = zeros(4,10);
4 commentaires
Tao Yang
le 14 Juil 2015
Sean de Wolski
le 14 Juil 2015
Yeah, it could be rewritten as a larger matrix multiplication with a few reshapes and permutes but why bother? It's already blazingly fast!
Let me make it a little bigger and time it:
A = randn(400,20,10000);
B = randn(20,10000);
tic
C = zeros(400,10000);
for i = 1:10000
C(:,i) = A(:,:,i)*B(:,i);
end
toc
So now I'm doing a whole lot more math in (on my wimpy laptop) ... drum roll
Elapsed time is 0.213792 seconds.
Less than a quarter of a second!
Loops aren't slow in MATLAB. Inefficiencies within loops like not preallocating slow MATLAB down.
Tao Yang
le 14 Juil 2015
Sean de Wolski
le 16 Juil 2015
Have you profiled it to see if that is the bottleneck?
Catégories
En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!