You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:21:09