Is it possible to vectorize this loop?

1 回表示 (過去 30 日間)
Adam Frej
Adam Frej 2020 年 11 月 30 日
編集済み: Jan 2020 年 11 月 30 日
A = rand(1, 100);
B = rand(1, 100);
w = 0;
for i = 1:length(A)
w = w + A(i).*B;
end

採用された回答

Stephan
Stephan 2020 年 11 月 30 日
w_new = (sum(w + A.*B(:),2))';
  1 件のコメント
Adam Frej
Adam Frej 2020 年 11 月 30 日
Good answer. It can be simplified to:
w_new = (sum(A'*B))

サインインしてコメントする。

その他の回答 (1 件)

Jan
Jan 2020 年 11 月 30 日
編集済み: Jan 2020 年 11 月 30 日
A = rand(1, 1000);
B = rand(1, 1000);
tic
for k = 1:1000
w = 0;
for i = 1:length(A)
w = w + A(i).*B;
end
end
toc
tic
for k = 1:1000
w = (sum(A .* B(:),2))';
end
toc
tic
w = 0;
for k = 1:1000
w = sum(A' * B);
end
toc
I get the timings (Matlab online!):
0.34 seconds
0.69 seconds
0.41 seconds
So check it on your machine is the vectorization is an advantage.

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by