% 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

 Réponse acceptée

dpb
dpb le 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 commentaires

zeraye
zeraye le 22 Oct 2022
Modifié(e) : Stephen23 le 23 Oct 2022
Works perfectly! Thanks
dpb
dpb le 23 Oct 2022
Of course it does... <VBG>

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by