random.setstate() 和 random.seed() 之间差异或相似之处的确切性质是什么

2023-12-19

我对使用种子生成随机数有一个非常高的理解。因此,在生成随机数之前设置特定的种子将导致每次调用时生成相同的数字。

我假设通过以下方式恢复状态

import random
test123 = random.getstate()
random.setstate(test123)

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

我正在寻求对它们的相似点和差异的理解。例如:是否将种子设置为某个值并通过 random.setstate(random.getstate()) 恢复生成器的内部状态在每种情况下复制随机数的某些方法?

我能找到的关于它们的记录不多


种子是一个简单的初始值,您可以传递该值来初始化生成器。另一方面,状态是生成器的完整当前内部状态。是的,设置种子和设置状态本质上是同一件事,因为它允许您重播特定的伪随机数序列。然而,在内部,生成器不能处理像种子这样的简单值。什么是get/setstate方法允许您以编程方式从正在运行的生成器恢复状态;例如,种子值是您从配置文件中作为参数提供的值。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

random.setstate() 和 random.seed() 之间差异或相似之处的确切性质是什么 的相关文章

随机推荐