How to replace for loop with vectorization?
Mostrar comentarios más antiguos
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 comentarios
Walter Roberson
el 17 de Oct. de 2019
You can repmat(ii, size(res,2),1) and use res(:)
Sai Bhargav Avula
el 23 de Oct. de 2019
repmat may not be the right way as the accumarray is used here.
Respuesta aceptada
Más respuestas (1)
Bruno Luong
el 23 de Oct. de 2019
[iii,jj]=ndgrid(ii,1:size(res,2));
v=accumarray([iii(:) jj(:)], res(:))
Categorías
Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!