我想在[1,n]
区间创建两个随机整数,这些整数保证彼此不同。我觉得
ri(1)=randi([1 n]);
ri(2)=randi([1 n]);
while ri(1)==ri(2)
ri(2)=randi([1 n]);
end
并不是你能做的最顺利的事。
答案 0 :(得分:8)
一种方法是使用randperm
,以便生成从n
到1
枚举的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