matlab的randperm和randsample

参考链接: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

 

你可能感兴趣的:(matlab)