Efficient implementation for loops

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

回答(1 个)

Preallocating C will make this much faster:
Before the loop:
C = zeros(4,10);

4 个评论

Thanks.
Is there a way to avoid the for loop?
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.
Thanks Sean.
Actually I simplified the original question. The above operation is just a small part of my entire code and needs to be repeated a lot of times (I'm running a big Monte Carlo simulations).
So I would appreciate if you could help me with the loop-free solution.
Many thanks, Tao
Have you profiled it to see if that is the bottleneck?

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by