我设置了以下最小示例:
rng(0);
randseedoffset = random('unid', 10^5) + 1;
t = cell(10,1);
for i = 1:10
rng(randseedoffset+i);
t{i} = random('unid', 1000);
end
disp(t);
这将生成 10 个随机数并将它们存储在 t
中。它总是会可靠地产生相同的随机数,因为我在 for 循环中使用 rng
设置了种子。
如果我现在将 for
更改为 parfor
,我会得到不同的结果!尽管它们也将始终是可复制的。
我想用 parfor 加速我的代码,并且仍然获得与 for... 完全相同的随机数
好的,我刚找到原因:
MATLAB 支持不同的随机数生成算法。在当前版本的通常设置中,这是 Mersenne Twister。当您进入 parfor 循环时,这会变成他们所说的“组合递归方法”。
可以通过在循环中将类型显式设置为 'twister'
来解决此问题:
parfor i = 1:10
rng(randseedoffset+i, 'twister');
t{i} = random('unid', 1000);
end
我是一名优秀的程序员,十分优秀!