置换同余生成器 (64位, PCG64)#

class numpy.random.PCG64(seed=None)#

PCG-64 伪随机数生成器的位生成器。

参数:
seed{None, int, array_like[ints], SeedSequence},可选

用于初始化 BitGenerator 的种子。如果为 None,将从操作系统获取新的、不可预测的熵。如果传入 `int` 或 `array_like[ints]`,则会将其传递给 SeedSequence 以推导初始的 BitGenerator 状态。也可以传入 SeedSequence 实例。

备注

PCG-64 是 O’Neill 置换同余生成器 ([1], [2]) 的一个 128 位实现。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 位无符号整数表示。

状态和播种

PCG64 状态向量由 2 个无符号 128 位值组成,它们在外部表示为 Python 整数。其中一个是被线性同余生成器 (LCG) 推进的伪随机数生成器 (PRNG) 状态。另一个是在 LCG 中使用的固定奇数增量。

输入种子由 SeedSequence 处理以生成这两个值。增量不能独立设置。

并行特性

在并行应用中使用位生成器的首选方法是使用 SeedSequence.spawn 方法获取熵值,并使用这些熵值生成新的位生成器。

>>> from numpy.random import Generator, PCG64, SeedSequence
>>> sg = SeedSequence(1234)
>>> rg = [Generator(PCG64(s)) for s in sg.spawn(10)]

兼容性保证

PCG64 保证固定的种子将始终产生相同的随机整数流。

参考文献

状态#

state

获取或设置 PRNG 状态

并行生成#

advance(delta)

将底层 RNG 前进 delta 次抽样后对应的状态。

jumped([jumps])

返回一个状态已跳跃的新位生成器。

扩展#

cffi

CFFI 接口

ctypes

ctypes 接口