Sum matrix with repeating indices
2 views (last 30 days)
Show older comments
Hi! I have one matrix, A, that has one column of identifier values (with repeats and some missing numbers) and a column of values. I'd like to produce a column of all of the unique values and then another column of their sum. For example, if A is as follows, i want to produce B.
A = [1 2
1 -3
2 0
3 3
5 6
2 -4
4 0.5
7 9
7 2]
% I want to produce B
B = [1 -1
2 -4
3 3
4 0.5
5 6
7 11]
0 Comments
Accepted Answer
Stephen23
on 20 Mar 2022
Edited: Stephen23
on 21 Mar 2022
A simple MATLAB approach:
A = [1,2;1,-3;2,0;3,3;5,6;2,-4;4,0.5;7,9;7,2]
[G,U] = findgroups(A(:,1));
M = [U,accumarray(G,A(:,2))]
2 Comments
Steven Lord
on 21 Mar 2022
Instead of using findgroups and accumarray I would probably use groupsummary.
A = [1,2;1,-3;2,0;3,3;5,6;2,-4;4,0.5;7,9;7,2];
[values, groups] = groupsummary(A(:, 2), A(:, 1), @sum);
results = [groups, values]
More Answers (1)
Voss
on 20 Mar 2022
Edited: Voss
on 20 Mar 2022
One perfectly valid MATLAB approach:
A = [1 2
1 -3
2 0
3 3
5 6
2 -4
4 0.5
7 9
7 2];
[uA,~,jj] = unique(A(:,1));
n_uA = numel(uA);
B = [uA zeros(n_uA,1)];
for ii = 1:n_uA
B(ii,2) = sum(A(jj == ii,2));
end
disp(B)
% % I want to produce B
% B = [1 -1
% 2 -4
% 3 3
% 4 0.5
% 5 6
% 7 11];
0 Comments
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!