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

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

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

Answer by Evan
on 17 Jun 2013

Edited by Evan
on 17 Jun 2013

Accepted answer

Try this:

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

Show 1 older comment

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.

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),:);

## 0 Comments