令人惊讶的行为randsample

3视图(30天)
骑自行车的人
骑自行车的人 2023年2月26日
移动: 图像分析 2023年2月26日
我最近得到的行为所震惊 randsample
1。生成序列替换,不足为奇
当我生成序列 替换(后设置相同的种子),生成的前N值是相同的,不管有多少值我生成:
种子= 13;
N = 12;
倪= 1:N
rng(种子)
流(“randsample(取代),% 2 d值(s):“、镍);流(“% g”randsample (N,倪真的)');流(“\ n”);
结束
randsample(取代),1值(s): 10 randsample(取代),2值(s): 10 3 randsample(取代),3值(s): 10 3 randsample(取代),4 (s)值:10 3 10 12 randsample(取代),5值(s): 10 3 10 12 12 randsample(取代),6值(s): 10 3 10 12 12 6 randsample(取代),7 (s)值:10 3 10 12 12 6 8 randsample(取代),8值(s): 10 3 10 12 12 6 8 10 randsample(取代),9值(s): 10 3 10 12 12 6 8 10 8 randsample(取代),10值(s): 10 3 10 12 12 6 8 10 8 9 randsample(取代),11 (s)值:10 3 10 12 12 6 8 10 8 9 1 randsample(取代),12 (s)值:10 3 12 12 6 8 10 8 9 1 4
2。生成不重复序列,令人惊讶
当我生成序列 没有 替换(设置相同的种子)后,我期望相同的行为。这就是行为——但只有在足够长序列。短序列的值是不一样的。
种子= 13;
N = 12;
倪= 1:N
rng(种子)
流(“randsample(没有取代),% 2 d值(s):“、镍);流(“% g”randsample (N,倪,假)');流(“\ n”);
结束
randsample(没有取代),1值(s): 10 randsample(没有取代),2值(s): 3 10 randsample(没有取代),3值(s): 10 12 3 randsample(没有取代),4值(s): 11 2 12 6 randsample(没有取代),5值(s): 11 2 12 6 7 randsample(没有取代),6值(s): 11 2 12 6 7 9 randsample(没有取代),7值(s): 11 2 12 6 7 9 10 randsample(没有取代),8值(s): 2 12 6 7 8 9 10 11 randsample(没有取代),9值(s): 11 2 12 6 7 8 9 10 1 randsample(没有取代),10值(s): 11 2 12 6 7 8 9 10 1 3 randsample(没有取代),11 (s)价值:11 2 12 6 7 8 9 10 1 3 4 randsample(没有取代),12值(s): 11 2 12 1 3 4 5 6 7 8 9 10
注意前三行不遵循的模式。这对我来说似乎很奇怪,也许是车。(行为是一致的,不依赖于特定的种子。)
我不确定我有一个问题,除了……“这看起来奇怪别人吗?”

接受的答案

保罗
保罗 2023年2月26日
移动:骑自行车的人 2023年2月26日
我没有看到任何的医生说任何关于订购。randsample m文件。不重复的算法变化4 * k > n时,randsample与结果显示一致。
datasample 放回相同的工作,但不重复太多不同。
datasample替代randsample是一样的。
种子= 13;
N = 12;
倪= 1:N
rng(种子)
流(“datasample(取代),% 2 d值(s):“、镍);流(“% g”datasample (1: N,倪“替换”,真正的)');流(“\ n”);
结束
datasample(取代),1值(s): 10 datasample(取代),2值(s): 10 3 datasample(取代),3值(s): 10 3 datasample(取代),4 (s)值:10 3 10 12 datasample(取代),5值(s): 10 3 10 12 12 datasample(取代),6值(s): 10 3 10 12 12 6 datasample(取代),7 (s)值:10 3 10 12 12 6 8 datasample(取代),8值(s): 10 3 10 12 12 6 8 10 datasample(取代),9值(s): 10 3 10 12 12 6 8 10 8 datasample(取代),10值(s): 10 3 10 12 12 6 8 10 8 9 datasample(取代),11 (s)值:10 3 10 12 12 6 8 10 8 9 1 datasample(取代),12 (s)值:10 3 12 12 6 8 10 8 9 1 4
但datasample没有替换是……
种子= 13;
N = 12;
倪= 1:N
rng(种子)
流(“datasample(没有取代),% 2 d值(s):“、镍);流(“% g”datasample (1: N,倪“替换”、虚假)');流(“\ n”);
结束
datasample(没有取代),1值(s): 10 datasample(没有取代),2值(s): 10 3 datasample(没有取代),3值(s): 5 12 9 datasample(没有取代),4值(s): 4 8 11 12 datasample(没有取代),5值(s): 3 10 6 12 11 datasample(没有取代),6值(s): 3 12 5 11 10 9 datasample(没有取代),7 (s)值:2 10 4 9 8 11 7 datasample(没有取代),8值(s): 2 10 4 9 8 12 7 11 datasample(没有取代),9值(s): 2 9 4 12 7 11 6 10 8 datasample(没有取代),10值(s): 1 8 3 12 6 10 5 9 7 11 datasample(没有取代),11 (s)价值:1 7 12 11 5 9 4 8 6 10 2 datasample(没有取代),12 (s)的值:12 2 1 7 8 6 10 11 4 9 5 3
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2023年2月26日
移动:骑自行车的人 2023年2月26日
不重复的算法变化时4 * k > n
这个是Fisher-Yates洗牌停止使用。
尽管很有效的财政年度,当你要求生成大多数或所有可用的位置,那么在某种程度上变得更高效的使用(rand())算法,我收集。

登录置评。

更多的答案(0)

下载188bet金宝搏


释放

R2022b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!