对于相同的种子,为什么 random.random() 与 numpy.random() 相比会产生不同的随机值。我的理解是他们都使用 Mersenne Twister 来生成随机值。
import random as rnd
import numpy as np
rnd.seed(1)
np.random.seed(1)
rnd.random()
np.random.rnd()
0.13436...
0.41702...
random 模块和 numpy.random 都使用 mt19937 来生成随机数。因此,我们可以将一个生成器的状态复制到另一个生成器,以查看它们是否具有相同的底层实现。
import random as rnd
import numpy as np
# seed numpy
np.random.seed(1)
# get state from numpy
state = [int(s) for s in list(np.random.get_state()[1])]
state.append(624)
state = tuple(state)
state = (3, tuple(state), None)
# set state for python
rnd.setstate(state)
print(rnd.random())
print(np.random.rand())
0.417022004702574
0.417022004702574
如果手动将状态设置为相同,则使用的 mt19937 引擎看起来会给出相同的结果。这似乎意味着种子函数的实现方式不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)