如何生成1-31范围内可重复的3数字组合?Matlab代码问题咨询
生成可重复的1-31数字组合(N次试验)
哦,我明白你的问题了——你原来用randperm(31)生成的是1到31的无重复随机排列,所以哪怕只取前3个,结果也肯定是不重复的,完全不符合你要的可重复组合需求。别担心,咱们换个更合适的方法就能搞定!
方法一:用randi直接生成(首推)
randi是Matlab专门用来生成指定范围内随机整数的函数,天生支持重复值,完美适配你的需求。比如要做1000次试验,每次生成3个1-31的数字,代码可以写成:
N = 1000; % 自定义试验次数 Y = randi([1, 31], N, 3);
这段代码会直接生成一个N行3列的矩阵,每一行就是一次试验的3数字组合,元素之间完全允许重复(比如可能出现[5,5,12]这种情况)。
举个小例子,当N=3时,运行结果可能是这样的:
Y = 2 12 31 15 15 7 3 22 31
方法二:用rand手动转换(可选)
如果你想手动实现整数转换逻辑,也可以用rand生成0-1的随机数,再缩放、取整:
N = 1000; Y = floor(rand(N, 3) * 31) + 1;
不过这种方法不如randi直观高效,所以更推荐第一种方案。
小提示
如果需要在循环里逐次生成单组数据,也可以在循环内用randi([1,31], 1, 3)来生成,但直接生成整个矩阵的方式速度更快,尤其是当N很大的时候。
内容的提问来源于stack exchange,提问作者Rolly
相关产品推荐
相关产品推荐

