Asked by Kristofer Kusano
on 24 Jun 2013

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?

*No products are associated with this question.*

Answer by Andrei Bobrov
on 24 Jun 2013

Edited by Andrei Bobrov
on 24 Jun 2013

Accepted 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);

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments