I have a martix and want to shuffle element of it .
x=[1 2 5 4 6 ]
after shuffle(something like this)
x=[2 4 6 5 1]
obtain shuffled indices using randperm
idx = randperm(length(x));
use indices to obtain shuffled vector
xperm = x(idx);
As an alternate to randperm
, you can also use randsample from the statistics toolbox.
y = randsample(n,k)
returns ak
-by-1
vectory
of values sampled uniformly at random, without replacement, from the integers1
ton
.
Note that it is "without replacement" (by default). So if you set k
as length(x)
, it is equivalent to doing a random shuffle of the vector. For example:
x = 1:5;
randsample(x,length(x))
%ans =
% 4 5 3 1 2
I like this more than randperm
, because it is easily extensible to different uses. For example, to draw 3 elements from x
at random (like drawing from a bucket with finite items), you do randsample(x,3)
. Likewise, if you wish to draw 3 numbers, where the alphabet is made up of the elements of x
, but allow for repetitions, you do randsample(x,3,true)
.