Vectorize for-loop with indexing

1 view (last 30 days)
zeraye
zeraye on 22 Oct 2022
Edited: Stephen23 on 23 Oct 2022
% I have following variables
B = [
0 -0.5000 -0.7222 -0.7778 -1.1111;
-0.2292 0 0 0 -1.1111;
-0.6111 -0.5000 -0.4815 -0.5185 0
];
idx = [
1 1 2 1 1;
2 2 3 4 4;
3 4 5 5 5
];
% I created for-loop
for i = 1:5
sum(B(idx == i))
end
% And output is
% ans =
%
% -2.3889
% ans =
%
% -0.9514
% ans =
%
% -0.6111
% ans =
%
% -1.6111
% ans =
%
% -1
% I want to vectorize this for-loop and get following array
% ans =
% -2.3889
% -0.9514
% -0.6111
% -1.6111
% -1.0000

Accepted Answer

dpb
dpb on 22 Oct 2022
S=accumarray(idx(:),B(:));
See accumarray for all the many permutations that can be made...
An alternative using grouping variables in Statistics TB could be
S=grpstats(B(:),idx(:),@sum);
or there's always splitapply
  2 Comments
zeraye
zeraye on 22 Oct 2022
Edited: Stephen23 on 23 Oct 2022
Works perfectly! Thanks
dpb
dpb on 23 Oct 2022
Of course it does... <VBG>

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!