Vectorize for-loop with indexing

% 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

 Respuesta aceptada

dpb
dpb el 22 de Oct. de 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 comentarios

zeraye
zeraye el 22 de Oct. de 2022
Editada: Stephen23 el 23 de Oct. de 2022
Works perfectly! Thanks
dpb
dpb el 23 de Oct. de 2022
Of course it does... <VBG>

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 22 de Oct. de 2022

Editada:

el 23 de Oct. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by