置乱同余生成器 (64位, PCG64)#
- class numpy.random.PCG64(seed=None)#
PCG-64 伪随机数生成器的 BitGenerator。
- 参数:
- seed{None, int, array_like[ints], SeedSequence}, optional
用于初始化
BitGenerator的种子。如果为 None,则将从操作系统拉取新的、不可预测的熵。如果传入一个int或array_like[ints],则它将被传递给SeedSequence来派生初始BitGenerator状态。也可以传入一个SeedSequence实例。
备注
PCG-64 是 O’Neill 的置乱同余生成器的 128 位实现 ([1], [2])。PCG-64 的周期为 \(2^{128}\),支持任意步数的推进以及 \(2^{127}\) 个流。我们使用的 PCG 系列中的具体成员是论文 ([2]) 中描述的 PCG XSL RR 128/64。
PCG64提供一个包含函数指针的胶囊,这些函数指针生成双精度浮点数以及无符号 32 位和 64 位整数。这些不能直接在 Python 中使用,必须由支持低级访问的Generator或类似对象来消费。支持
advance方法来任意步数地推进 RNG。PCG-64 RNG 的状态由 2 个 128 位无符号整数表示。状态和种子
PCG-64 状态向量由 2 个无符号 128 位值组成,这些值在外部表示为 Python 的 int。一个是 PRNG 的状态,它由一个线性同余生成器 (LCG) 推进。第二个是在 LCG 中使用的固定奇数增量。
输入种子由
SeedSequence处理以生成这两个值。增量不能独立设置。并行特性
在并行应用程序中使用 BitGenerator 的首选方法是使用
SeedSequence.spawn方法获取熵值,并使用这些值生成新的 BitGenerators。>>> from numpy.random import Generator, PCG64, SeedSequence >>> sg = SeedSequence(1234) >>> rg = [Generator(PCG64(s)) for s in sg.spawn(10)]
兼容性保证
PCG64保证固定的种子将始终产生相同的随机整数流。参考
状态#
获取或设置 PRNG 状态 |