优雅的方式来创建两个不同的随机整数

时间:2017-02-16 17:18:33

标签: matlab random

我想在[1,n]区间创建两个随机整数,这些整数保证彼此不同。我觉得

ri(1)=randi([1 n]);
ri(2)=randi([1 n]);
while ri(1)==ri(2)
  ri(2)=randi([1 n]);
end

并不是你能做的最顺利的事。

3 个答案:

答案 0 :(得分:8)

一种方法是使用randperm,以便生成从n1枚举的n值的随机排列,并且只返回结果的前两个元素:

ri = randperm(n, 2);

旧版本的MATLAB不支持以这种方式调用randperm。旧版本只接受一个输入变量,默认情况下返回n值的整个排列。因此,您可以使用一个输入版本调用randperm,然后将子集调入最终结果以返回所需内容:

ri = randperm(n);
ri = ri([1 2]);

答案 1 :(得分:2)

使用blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170在范围1 ... n

中创建两个唯一值
randperm

如果您希望在您的范围内加入0。然后:

out = randperm(n, 2)
out(1) = number 1
out(2) = number 2

答案 2 :(得分:2)

这是另一种方式:

ri(1) = randi([1 n]); % choose ri(1) uniformly from the set 1,...,n
ri(2) = randi([1 n-1]); % choose ri(2) uniformly from 1,...,n-1
ri(2) = ri(2) + (ri(2)>=ri(1)); % transform 1,...,n-1 into 1,...,ri(1)-1,ri(1)+1,...,n