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