How to replace for loop with vectorization?
古いコメントを表示
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 件のコメント
Walter Roberson
2019 年 10 月 17 日
You can repmat(ii, size(res,2),1) and use res(:)
Sai Bhargav Avula
2019 年 10 月 23 日
repmat may not be the right way as the accumarray is used here.
採用された回答
その他の回答 (1 件)
Bruno Luong
2019 年 10 月 23 日
[iii,jj]=ndgrid(ii,1:size(res,2));
v=accumarray([iii(:) jj(:)], res(:))
カテゴリ
ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!