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

1 vue (au cours des 30 derniers jours)
M G
M G le 1 Déc 2013
Modifié(e) : Jan le 1 Déc 2013
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
  2 commentaires
Jan
Jan le 1 Déc 2013
Did you pre-allocate S?
M G
M G le 1 Déc 2013
Yes I did. However, still runs for hours!

Connectez-vous pour commenter.

Réponse acceptée

Jan
Jan le 1 Déc 2013
Modifié(e) : Jan le 1 Déc 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.

Plus de réponses (0)

Catégories

En savoir plus sur Get Started with Optimization Toolbox dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by