Is it possible to vectorize this loop?

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 日

0 投票

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 日

1 投票

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.

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

質問済み:

2020 年 11 月 30 日

編集済み:

Jan
2020 年 11 月 30 日

Community Treasure Hunt

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

Start Hunting!

Translated by