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

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

Did you pre-allocate S?
Yes I did. However, still runs for hours!

댓글을 달려면 로그인하십시오.

 채택된 답변

Jan
Jan 2013년 12월 1일
편집: Jan 2013년 12월 1일
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.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Problem-Based Optimization Setup에 대해 자세히 알아보기

질문:

M G
2013년 12월 1일

편집:

Jan
2013년 12월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by