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

### Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

# How can I randomly select a row from a matrix?

Asked by Graeme on 17 Jun 2013

I have a matrix (m) that is 17543 x 17. The values are of the type double.

I want to randomly select 1 row from this matrix and save it as a new vector.

I tried this:

mrow = m(randsample(m:17543,1),:)

This works if the values are integers but it does not work because they are doubles.

It returns the error message:

"Subscript indices must either be real positive integers or logicals."

Any help would be really appreciated.

Thanks,

Graeme

## Products

Answer by Evan on 17 Jun 2013
Edited by Evan on 17 Jun 2013

Try this:

```ind = ceil(rand * size(m,1));
mrow = m(ind,:);
```

Evan on 17 Jun 2013

Are you sure? I just tried this out with a random sample of size 17543x17 and I'm getting different rows each time. When you run my code, does the value of "ind" always return 1? I think it would only return 1 every time if m was a 1xn matrix.

Graeme on 17 Jun 2013

Apologies you are correct.

Thanks you very much for your help!

Evan on 17 Jun 2013

No worries! And you're welcome--glad you got it fixed. :)

Answer by Jonathan Sullivan on 17 Jun 2013

Try using randi

Example

```randomRow = m(randi(size(m,1)),:);
```

Answer by Wayne King on 17 Jun 2013
Edited by Wayne King on 17 Jun 2013
```m = randn(17543,17);
idx = randperm(size(m,1),1);
B = m(idx,:);
```

idx tells you which row you randomly selected.

If you have an older version of MATLAB where the above does not work do:

```m = randn(17543,17);
idx = randperm(size(m,1),1);
B = m(idx(1),:);
```