如何在Matlab中生成唯一的随机数?

Mil*_*war 4 matlab unique

我需要生成范围为1到n的m个唯一随机数.目前我实施的是:

round(rand(1,m)*(n-1)+1)
Run Code Online (Sandbox Code Playgroud)

但是,阵列中会重复一些数字.我怎样才能得到唯一的数字?

Ste*_*fin 13

你可以用randperm.

从描述:

p = randperm(n,k) 返回一个行向量,包含从1到n(包括1和n)随机选择的k个唯一整数.

因此,randperm(6,3) 可能是向量

[4 2 5]
Run Code Online (Sandbox Code Playgroud)

更新

randperm的两个参数版本仅出现在R2011b中,因此如果您使用的是早期版本的MATLAB,那么您将看到该错误.在这种情况下,使用:

A = randperm(n); 
A = A(1:m);
Run Code Online (Sandbox Code Playgroud)


Lui*_*ndo 5

如上所述,在早于R2011b的Matlab版本中,randperm只接受一个输入参数.在这种情况下,假设您拥有Statistics Toolbx,最简单的方法是使用randsample:

randsample(n,m)
Run Code Online (Sandbox Code Playgroud)