## Finding unique rows in a matrix and summing their weights faster

Asked by Kristofer Kusano

### Kristofer Kusano (view profile)

on 24 Jun 2013
Accepted Answer by Andrei Bobrov

### Andrei Bobrov (view profile)

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?

## Products

No products are associated with this question.

### Andrei Bobrov (view profile)

Answer by Andrei Bobrov

### Andrei Bobrov (view profile)

on 24 Jun 2013
Edited by Andrei Bobrov

### Andrei Bobrov (view profile)

on 24 Jun 2013

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

#### Join the 15-year community celebration.

Play games and win prizes!

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