如何将matlab random generator的状态恢复到numpy?

ua4mk5z4  于 2023-04-21  发布在  Matlab
关注(0)|答案(1)|浏览(120)

我可以用下面的代码保存matlab随机数生成器的状态

seed = 10;
rng(seed, 'twister');
%... random functions that don't need to be reproduced%

s = rng;
s.Type
s.Seed
s.State
save('rand_state.mat', 's');

%... random functions that need to be reproduced%

如何将Mersenne Twister的 state 导入numpy,以便它在保存后生成相同的随机数?
仅仅使用np.random.RandomState(seed)并没有考虑到twister的状态在保存之前被后续的随机调用修改过。

lc8prwob

lc8prwob1#

我拿到了!
RandomState有一个函数set_state(),它接受输入state = ('MT19937', keys, pos)
唯一的问题是matlab将pos保存为State的最后一个元素。其余的都是set_state需要的键。

rng = np.random.RandomState(s['Seed'])
rng.set_state("MT19937", s['State'], s['State'][-1])

我学到了matlab和python使用不同的转换来将随机抽取从[0,1)转换为整数或正常变量。因此,如果需要在python中复制,则必须在matlab中为int和normal编写自定义函数。

相关问题