import random
random.seed(234)
state = random.getstate()
结果状态是一个元组:
(3, (.... many long integers...), None)
这到底是什么意思?我知道我可以保存状态并使用random.setstate(state)来恢复此模块中使用的任何随机数生成器的内部状态。但我不知道州内的这些价值是什么意思。官方文件没有说明任何细节。我想这可能意味着用于确定随机状态的参数。
答案 0 :(得分:1)
自Python 2.3以来使用的算法是Mersenne Twister。 docs注意到状态是特定于实现的。除非你真的需要,否则我不会依赖国家的任何特定细节。
Mersenne Twister首先使用种子初始化一个整数数组。这是来自维基百科关于Mersenne Twister的文章的一个有用(略微编辑)的Python代码片段:
state = [0] * 624
state[0] = seed
for i in range(1, 624):
state[i] = int(
0xFFFFFFFF & (1812433253 * (state[i - 1] ^ state[i - 1] >> 30) + i)
)
注意这是无符号位算术。这是用于生成状态的算法,如CPython source code中所示。
CPython代码将624设置为要用作索引变量的状态的最后一个元素,因此状态数组实际上有625个元素,而上面的Wikipedia代码段中有624个元素。 "扭曲" operation使用此索引变量。
当我将使用Python维基百科代码的结果与随机模块进行比较时,我没有得到相同的624个整数。我认为这可能是Python代码没有做与C代码相同的算法和C代码操纵的种子的组合。当我有更多时间时,我会好好看看。