How to vectorize a two matrices in row-wise multiplication (optimization)?

1 view (last 30 days)
Hi Matlab users,
I have the following code where N = 20000, "prt1" and "P" are both matrices of (20000x20000). As can be seen in the code I want to multiply each row of "prt1" from 1st to 20000th row in row 1 of "P" and then all rows of "prt1" in row 2 of "P" and so on. Every time sum them up and put in the matrix of "S". Unfortunately, This takes me great deal of time. Any way that I can optimize this such vectorization?
Here is the code:
for r = 1:N
for c = 1:N
S(r,c) = sum (prt1(c,:).*P(r,:));
end
end
Thank you very much for your hint.
All the best....
MhD

Accepted Answer

Jan
Jan on 1 Dec 2013
Edited: Jan on 1 Dec 2013
For N = 1000 I get 1.7 sec instead of 21 sec of the original version:
S = zeros(N, N);
for r = 1:N
S(r, :) = prt1 * P(r, :)';
end
But with 0.14 seconds even faster:
S = P * ptr1';
A speedup of factor 150, fine.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!