例如:A=[1,4,5,8,14,15],从数组A中产生3个不重复的随机数。(当然也可以从A=1:n个数中产生几个不重复随机数)或者(将数组随机排序)。此过程需要利用randperm函数。
1.randperm函数
y = randperm(n),y是把1到n这些数随机打乱得到的一个数字序列。也可以认为是生成了1到n的不重复的随机排序的n个数。
>> y = randperm(5)
y =
2 3 4 1 5
y = randperm(n,m),生成1到n之间的,不重复的,随机的,m个数。可以理解为,先生成了,y = randperm(n),然后取了前m个数,所以m不能大于n。
>> y = randperm(4,3)
y =
4 1 3
>> y = randperm(3,4)
错误使用 randperm
K 必须小于或等于 N。
2.numel(x)
numel(x)获得变量长度
y =
4 1 3
>> numel(y)
ans =
3
3.X=X(A) 获取新排列的数列
A为新的数组的排列顺序的数组。例如,A=[2 1 3],也就是将,原数组中,第2个数放在第一位,第1个数放第二位,第三个数放第三位。
y =
4 1 3
>> y=y([2 1 3])
y =
1 4 3
4.数组的随机排序
利用randperm(n),生成了1到n个,随机排序的,不重复的,n个数,相当于生成了新数组的顺序,配合X=X(A),即可进行排序。
>> A=randperm(3)
A =
1 3 2
>> y
y =
1 4 3
>> y=y(A)
y =
1 3 4
5.数组中产生不重复随机数
与上一个数组的随机排序相类似,用randperm(n),生成了1到n个,随机排序的,不重复的,n个数,相当于生成了新数组的顺序。但是,这次是要生成其中部分的随机数,所以,要用randperm(n,m)。然后就能在n个原来的数中,产生随机的不重复的m个数。
可以用numel(y)获取原来的数组中n的数值。
y =
4 5 8 3 7 8 14 69 3
>> n=numel(y)
n =
9
>> X=randperm(9,4)
X =
9 8 2 3
>> y=y(X)
y =
3 69 5 8