参考链接:https://blog.csdn.net/jiejinquanil/article/details/50057045
一、randperm
randperm能够产生不重复的随机排列
用法:randperm(n,k) 可以产生0-n之间的k个随机整数
randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:randi(K,m,n)产生m*n的矩阵,矩阵所有元素都在[0,K)上
>> randi(4,1,3)
ans =
4 4 1
>> randi(4,3,3)
ans =
4 4 4
4 1 4
2 2 4
randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。
二、randsample
比randperm复杂,实际上是调用了randperm,实现过程中调用了很多接口
2.1 randsample(n,k)和randperm(n,k)的功能一样,都是产生k个不相同的数(1-n)。
2.2 randsample(ARRAY,k),事实上就是randperm和原数组结合使用的形式,从ARRAY数组里面随机取出k个不相同的数。
2.3 randsample(n,k,replacement) replacement表示是否允许重复,1表示k个元素可以有重复的,0表示不可以重复
2.4 y = randsample(population,k,true,w) 这个是最实用的权重功能,可以控制k个元素每一个出现的频率
w是权重系数,能够根据此权重系数在原数组population(或1-n数组)里面选出可能重复的k个数。
>> randsample([1,2,3,4],3)
ans =
2 4 1
>> randsample([1,2,3,4],3,true)
ans =
1 4 2
>> randsample(9,8)
ans =
8
3
4
9
1
2
7
5
>> t=randsample('ABCD',30,true,[0.5,0.25,0,0.25])
t =
DAAADADAAAADBBADBABAAAAAAAADDA
>> length(t)
ans =
30