新手提问
老哥们好,今天听了小甲鱼的课程
说是random.randint()是利用系统时间作为种子来生成伪随机数
然后我就有一个疑问
假如我在A时间 利用x=random.getstate() 获取了A时间的状态
然后在B时间 利用random.randint()生成了伪随机数
然后在C时间 利用random.setstate(x)恢复到A时间的状态再次生成伪随机数
那么我就有一个问题,由于种子和系统时间挂钩,我在B时间得到的伪随机数应该和A时间是不同的,但是实际输出确是相同的,这是为什么呢 {:10_266:}我是新手老哥们别笑话我 本帖最后由 wp231957 于 2021-4-25 07:45 编辑
关于随机数种子的问题,是个狠高大上的事,既便把论文给你,也未必能看懂,所以了,我们会用就好了 不指定a时产生种子和系统时间挂钩,不是说产生随机数和系统时间挂钩。
详情help(random.seed)。 应该是 getstate() 和 setstate() 就是为了可以 重现随机 吧。
——A时刻产生的seed 内包含N个 伪随机的随机数(随机序列),每次random.randint()根据这个seed生出一个随机数。
getstate()可以保存这样一个seed的状态(所有随机序列),再通过setstate()恢复到随机开始时,以重现这些随机数(伪随机)。
ps: 数学家们好像说 这些随机数不是真随机,也只是“伪随机”。
我是这样理解的,即使你是根据时间数来生成,但我只要知道你生成的那个时间点,
且知道你所用的随机公式,那我也可以计算出同样的随机序列。
阿奇_o 发表于 2021-4-25 20:56
应该是 getstate() 和 setstate() 就是为了可以 重现随机 吧。
——A时刻产生的seed 内包含N个 伪随机的随 ...
老哥 也就是说 种子是在某个时刻生成好的 不会随着时间改变了
我每次调用random.randint 就是用这个种子按顺序生成
setstate 就是回到这个种子刚开始的状态 重新按顺序生成
是这个意思吧 tz编程学习 发表于 2021-4-26 20:20
老哥 也就是说 种子是在某个时刻生成好的 不会随着时间改变了
我每次调用random.randint 就是用这个种子 ...
是的。文档里也有说到。你自己试验一下,也可以看到,“随机重现了”。
页:
[1]