我正在try 改进我的NumPy随机数生成器,以模拟绘制n个随机数.然而,当我将推进n个数字后的位生成器的状态与简单地绘制n个数字后的状态进行比较时,结果在某一点之后有所不同.
我知道一些随机数字可能需要将状态前进多次,但我发现奇怪的是,前40-50个抽签数字的结果是匹配的,然后又出现分歧.
我try 使用Advance,因为有时我必须抽取随机数来保持重复相同的结果,尽管对于某些用例,我已经知道我不使用这些数字.在本例中,我想简单地(且快速地)推进随机数生成器,但确保绘制的所有数字保持不变.
我如何才能在确保可重复性的同时仍然使用高级等功能?
如果我使用从numpy
开始的随机数生成器,我会比较每次前进10个增量与一次绘制相同数量的随机变量(standard_normal
)时bit_generator
的状态.经过几次迭代后,rng.bit_generator.state
出现了分歧.我不知道为什么,因为我预计它会立即分开,或者永远不会分开.
rng = np.random.default_rng(2024)
s = rng.bit_generator.state
step = 10
num = 5
# Draw Random numbers using standard normal variable
rng.bit_generator.state = s
x = list()
for i in range(num):
rng.standard_normal(step)
x.append(rng.bit_generator.state['state']['state'])
print('{i:3d} - {state:40d} {inc:40d}'.format(i=i, **rng.bit_generator.state['state']))
# Reset state and advance random number generator
rng.bit_generator.state = s
y = list()
for i in range(num):
rng.bit_generator.state = rng.bit_generator.advance(step).state
y.append(rng.bit_generator.state['state']['state'])
print('{i:3d} - {state:40d} {inc:40d}'.format(i=i, **rng.bit_generator.state['state']))
对于我来说,输出是这样的.迭代2的结果不同,即状态不同.
0 - 317319928805135160732659717497650841180 263843294879837360010514471918415607657
1 - 152261761237047187080279356346465986730 263843294879837360010514471918415607657
2 - 12941317612297752247903241541248335614 263843294879837360010514471918415607657
3 - 167375039976652124381293896870728401724 263843294879837360010514471918415607657
4 - 78535979019656695810700673044059278986 263843294879837360010514471918415607657
0 - 317319928805135160732659717497650841180 263843294879837360010514471918415607657
1 - 152261761237047187080279356346465986730 263843294879837360010514471918415607657
2 - 262244773524709030991986015855808125320 263843294879837360010514471918415607657
3 - 174718512225906865463277455530823048310 263843294879837360010514471918415607657
4 - 213819718814773627130094102456555149556 263843294879837360010514471918415607657