How to replace for loop with vectorization?
Show older comments
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 Comments
Walter Roberson
on 17 Oct 2019
You can repmat(ii, size(res,2),1) and use res(:)
Sai Bhargav Avula
on 23 Oct 2019
repmat may not be the right way as the accumarray is used here.
Accepted Answer
More Answers (1)
Bruno Luong
on 23 Oct 2019
[iii,jj]=ndgrid(ii,1:size(res,2));
v=accumarray([iii(:) jj(:)], res(:))
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!