MATLAB: Finding unique rows in a matrix and summing their weights faster

uniqueweights

I am performing the following:
% a matrix where rows are observations
A = [1 2;
4 6;
1 2;
9 2;
4 2;
6 9];
% each row has a weight
W = (1:size(A, 1))';
% find unique rows
[uA, ~, icA] = unique(A, 'rows')
>>
uA =
1 2
4 2
4 6
6 9
9 2
icA =
1
3
1
5
2
4
% what is the combined weight for each unique row?
wA = zeros(size(uA, 1), 1);
for i = 1:length(uA)
wA(i) = sum(W(icA == i));
end
% check it works
wA
>>
wA =
4
5
2
6
4
assert(sum(W) == sum(wA), 'sum(W) ~= sum(wA)')
The code works, but the for loop is very slow for a large number of rows. Does anyone know a faster way to do this?

Best Answer

A = [1 2
4 6
1 2
9 2
4 2
6 9];
[aa,cc,cc] = unique(A,'rows');
W = (1:size(A, 1))';
wA = accumarray(cc,W);
Related Question