Vectorization of For loop

25 Ansichten (letzte 30 Tage)
MahdiH
MahdiH am 14 Aug. 2020
Kommentiert: MahdiH am 16 Aug. 2020
Dear Matlab community,
Is it possible to vectorize the following for loop:
a = rand(100,100);
b = rand(500,100,100);
for i = 1:500
c = reshape(b(i, :, :),100,100);
d(i) = sum(sum(a.*c));
end
  14 Kommentare
Bruno Luong
Bruno Luong am 15 Aug. 2020
You could do a hybrid method: for-loop with each iteration compute a chunk of 50 elements of d.
MahdiH
MahdiH am 16 Aug. 2020
@ Bruno, Thanks for bringing the hybrid idea, I like it. Also, I'm aware that you explained the RAM issue, but I was telling Walter that the RAM limitation make the for loop my best bet.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 14 Aug. 2020
d = sum(b .* reshape(a, 1, 100, 100), [2 3]);
  1 Kommentar
MahdiH
MahdiH am 14 Aug. 2020
Brilliant! Thanks Walter.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Bruno Luong
Bruno Luong am 14 Aug. 2020
d = b(:,:)*a(:)
  1 Kommentar
MahdiH
MahdiH am 14 Aug. 2020
Thanks Bruno for your smart answer.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by