gpt4 book ai didi

python - python随机模块的内部状态

转载 作者:行者123 更新时间:2023-11-28 18:23:29 26 4
gpt4 key购买 nike

import random
random.seed(234)
state = random.getstate()

结果状态是一个元组:

(3, (.... many long integers...),  None)

这到底是什么意思?我知道我可以保存状态并使用 random.setstate(state) 来恢复此模块中使用的任何随机数生成器的内部状态。但我不知道该州的这些值(value)观是什么意思。官方文件没有说明任何细节。我想这可能意味着确定随机状态的参数。

最佳答案

自 Python 2.3 起使用的算法是 Mersenne Twister . docs请注意,状态是特定于实现的。因此,除非您确实需要,否则我不会依赖该州的任何特定细节。

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 个元素,而上面的维基百科片段中为 624。 “扭曲”操作使用此索引变量。

当我比较使用 Python 维基百科代码和随机模块的结果时,我没有得到相同的 624 个整数。我认为这可能是 Python 代码不执行与 C 代码相同的算法和 C 代码操纵的种子的组合。希望我有更多时间时会看看。

关于python - python随机模块的内部状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43289462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com