Is it possible to vectorize this loop?

1 vue (au cours des 30 derniers jours)
Adam Frej
Adam Frej le 30 Nov 2020
Modifié(e) : Jan le 30 Nov 2020
A = rand(1, 100);
B = rand(1, 100);
w = 0;
for i = 1:length(A)
w = w + A(i).*B;
end

Réponse acceptée

Stephan
Stephan le 30 Nov 2020
w_new = (sum(w + A.*B(:),2))';
  1 commentaire
Adam Frej
Adam Frej le 30 Nov 2020
Good answer. It can be simplified to:
w_new = (sum(A'*B))

Connectez-vous pour commenter.

Plus de réponses (1)

Jan
Jan le 30 Nov 2020
Modifié(e) : Jan le 30 Nov 2020
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.

Catégories

En savoir plus sur Loops and Conditional Statements 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