## Keep only certain rows (with minimum values) from a matrix

on 29 Jun 2013

### Matt J (view profile)

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.

## Products

No products are associated with this question.

on 29 Jun 2013
Edited by Matt J

### Matt J (view profile)

on 29 Jun 2013
```col2=accumarray(A(:,1),A(:,2),[],@min).';
```
```B=[1:length(col2);col2].'
```

Ferran

### Ferran (view profile)

on 29 Jun 2013

Thank you very much!

### the cyclist (view profile)

on 29 Jun 2013
Edited by the cyclist

### the cyclist (view profile)

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.
```

Ferran

### Ferran (view profile)

on 29 Jun 2013

Thank you very much! It's my first time around here, so I didn't know how that "Accept answer" thing works. I ended up using both yours and Matt J's suggestions and it works great!

Thank you very much, the cyclist!