Asked by Ferran
on 29 Jun 2013

I have the following matrix:

A = [1 2; 1 3; 1 1; 2 1; 2 2; 2 0]

which has an index (1, 2, etc...) in the first column, and the relevant information in the 2nd column.

I would like to reduce this matrix so that only 1 row stays with the same index: the row with the minimum relevant value (2nd column).

It should look like this:

B = [1 1; 2 0]

the rest of the rows should not appear.

Is there an easy way I could do that?

Thank you very, very much in advance. I've been trying this for hours now and can't find an easy way to obtain B.

*No products are associated with this question.*

Answer by the cyclist
on 29 Jun 2013

Edited by the cyclist
on 29 Jun 2013

The unique values in the first column are

unique(A(:,1))

and the minimum values from the second column can be found using the slick accumarray() function:

accumarray(A(:,1),A(:,2),[],@min)

so you can just concatenate those

[unique(A(:,1)),accumarray(A(:,1),A(:,2),[],@min)]

to get what you want.

doc accumarray for details.

Opportunities for recent engineering grads.

## 0 Comments