【问题标题】:What is the exact nature of differences or similarities between random.setstate() and random.seed()random.setstate() 和 random.seed() 之间差异或相似之处的确切性质是什么
【发布时间】:2017-08-28 15:55:03
【问题描述】:

我对使用种子生成随机数有一定的了解(在非常高的水平上)。所以在生成随机数之前设置一个特定的种子会导致在每次调用时生成相同的数字。

我假设通过

恢复状态
import random
test123 = random.getstate()
random.setstate(test123)

也会导致通过一些类似的过程复制随机数

我希望了解它们的异同。例如:是否将种子设置为某个值并在每种情况下通过 random.setstate(random.getstate()) 某些方法恢复生成器的内部状态以复制随机数?

我找不到太多关于它们的文档

【问题讨论】:

    标签: python random


    【解决方案1】:

    种子是一个简单的初始值,您可以传递它来初始化生成器。另一方面,状态是发电机的全电流内部状态。是的,设置种子和设置状态本质上是一回事,因为它允许您重播特定的伪随机数序列。但是,在内部,生成器不能使用像种子这样的简单值。 get/setstate 方法允许您以编程方式从正在运行的生成器恢复状态;例如,种子值是您从配置文件中作为参数提供的东西。

    让我们谈谈用例:您有一些涉及随机值的算法,并且您想测试该算法。为了使其可测试,它必须是可重现的。这意味着您需要能够控制算法中的随机元素。这就是 PRNG 的用武之地,它们是可预测和可重复的(与真正的 RNG 不同)。您将编写一些测试用例,指定一个简单的 seed 将 PRNG 设置为特定状态。种子是可以轻松写入测试用例的简短可读值。

    现在,如果您想在某个时候中断您的测试用例来检查它,然后也许后退一步并重新运行一个特定步骤(无论是手动还是以编程方式),您会想要获取 PRNG 的特定状态,以便以后能够将其重置为该特定状态。现在,PRNG 上没有 getseed 方法,因为它在内部无法使用您首先提供的种子之类的值;但它有一个getstate 方法,用于相同目的,它的返回值更复杂。

    【讨论】:

    • 我不能投票,因为我没有声誉。非常感谢,用例说明了一切
    猜你喜欢
    • 2019-10-02
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多