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

时间:2014-02-17 13:37:50

标签: matlab unique

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

round(rand(1,m)*(n-1)+1)

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

5 个答案:

答案 0 :(得分:13)

您可以使用randperm

来自说明:

  

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

因此,randperm(6,3) 可能是载体

[4 2 5]

更新

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

A = randperm(n); 
A = A(1:m);

答案 1 :(得分:5)

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

randsample(n,m)

答案 2 :(得分:4)

@Stewie描述的randperm方法似乎是大多数情况下的方法。但是,如果您只能使用带有1个输入参数的Matlab并且n非常大,那么对所有数字使用randperm并选择前几个可能是不可行的。在这种情况下,您可以执行以下操作:

  1. 生成1到n
  2. 之间的整数
  3. 生成介于1和n-1之间的整数,这是可用整数中的选择。
  4. 重复,直到您有m个数字
  5. 这可以通过randi完成,甚至可以通过在每一步绘制大量随机数来进行矢量化,直到唯一数量正确。

答案 3 :(得分:1)

使用MATLAB文件交换中的Shuffle

Index = Shuffle(n, 'index', m);

答案 4 :(得分:-1)

这可以通过对浮动的随机向量进行排序来完成:

[i,i]=sort(rand(1,range));
output=i(1:m);