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

Max*_*Max 5 random matlab

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

ri(1)=randi([1 n]);
ri(2)=randi([1 n]);
while ri(1)==ri(2)
  ri(2)=randi([1 n]);
end
Run Code Online (Sandbox Code Playgroud)

你真的不是最顺利的事情.

ray*_*ica 8

一种方法是使用,randperm以便生成n1最多和包含枚举的值的随机排列n,并仅返回结果的前两个元素:

ri = randperm(n, 2);
Run Code Online (Sandbox Code Playgroud)

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

ri = randperm(n);
ri = ri([1 2]);
Run Code Online (Sandbox Code Playgroud)

  • @Max根本不用担心.我甚至没有看文件......我只是从经验中知道:) (2认同)