gpt4 book ai didi

python - numpy.random.seed() 每次总是给出相同的随机数吗?

转载 作者:行者123 更新时间:2023-12-04 00:00:44 25 4
gpt4 key购买 nike

我知道如果我使用相同的种子,numpy.random.seed(seed) 将输出相同的数字。我的问题是,这会随着时间而改变吗?如果我明天再次尝试调用它,它是否仍会输出与昨天相同的一组随机数?

最佳答案

np.random文档描述了使用的 PRNG。显然,从 MT19937 进行了部分切换。至PCG64在最近的过去。如果您想要一致性,您需要:

  1. 修复使用的 PRNG,并且
  2. 确保您使用的是本地句柄(例如 RandomStateGenerator),以免对其他外部库的任何更改通过自己调用 np.random 全局变量来搞砸事情。

在本例中,我们使用较新的 BitGenerator API,提供各种 PRNG 的选择。

from numpy.random import Generator, PCG64

rg = Generator(PCG64(1234))

可以如下使用:

>>> rg.uniform(0, 10, 10)
array([9.767, 3.802, 9.232, 2.617, 3.191, 1.181, 2.418, 3.185, 9.641,
2.636])

如果我们多次重新运行此程序(即使在同一个 REPL 中!),我们将始终获得相同的随机数生成器。 PCG64 与 MT19937 一样,提供以下保证:

Compatibility Guarantee

PCG64 makes a guarantee that a fixed seed and will always produce the same random integer stream.

虽然,正如 @user2357112 支持 Monica 所指出的,对 使用随机整数序列(例如 np.random.Generator.uniform)的随机 API 函数的更改仍然存在技术上可行,但不太可能。

为了生成多个生成器,可以利用SeedSequence.spawn(k) 生成不同的k SeedSequence s。这对于一致的并发计算很有用:

from numpy.random import Generator, PCG64, SeedSequence

sg = SeedSequence(1234)
rgs = [Generator(PCG64(s)) for s in sg.spawn(10)]

关于python - numpy.random.seed() 每次总是给出相同的随机数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62309424/

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