Is it possible to vectorize this loop?

20 visualizzazioni (ultimi 30 giorni)
Adam Frej
Adam Frej il 30 Nov 2020
Modificato: Jan il 30 Nov 2020
A = rand(1, 100);
B = rand(1, 100);
w = 0;
for i = 1:length(A)
w = w + A(i).*B;
end

Risposta accettata

Stephan
Stephan il 30 Nov 2020
w_new = (sum(w + A.*B(:),2))';

Più risposte (1)

Jan
Jan il 30 Nov 2020
Modificato: Jan il 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.

Categorie

Scopri di più su Statistics and Machine Learning Toolbox in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by