How to replace for loop with vectorization?
Ältere Kommentare anzeigen
Is there any way I can replace this for loop with a vectorized approach?
v = zeros(4, 3);
ii = [1 ; 2 ; 3 ; 1 ; 3 ; 4];
res = [-1 -1 1 ; -1 -1 1 ; -1 -1 1 ; 1 1 -1 ; 1 1 -1 ; -1 1 -1];
for i = 1:3
v(:,i) = accumarray(ii , res(:,i));
end
I know if res was just scalar values, I could use this:
v= accumarray(ii , res);
But is it posible to remove the loop knowing that res has more than one columns?
2 Kommentare
Walter Roberson
am 17 Okt. 2019
You can repmat(ii, size(res,2),1) and use res(:)
Sai Bhargav Avula
am 23 Okt. 2019
repmat may not be the right way as the accumarray is used here.
Akzeptierte Antwort
Weitere Antworten (1)
Bruno Luong
am 23 Okt. 2019
[iii,jj]=ndgrid(ii,1:size(res,2));
v=accumarray([iii(:) jj(:)], res(:))
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!