置换同余生成器 (64-bit, PCG64 DXSM)#

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

用于 PCG-64 DXSM 伪随机数生成器的 BitGenerator。

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

用于初始化 BitGenerator 的种子。如果为 None,则将从操作系统获取新鲜且不可预测的熵。如果传入 intarray_like[ints],它将被传递给 SeedSequence 以推导初始的 BitGenerator 状态。也可以传入一个 SeedSequence 实例。

备注

PCG-64 DXSM 是 O’Neill 置换同余生成器的一种 128 位实现([1], [2])。PCG-64 DXSM 的周期为 \(2^{128}\),支持推进任意步数以及 \(2^{127}\) 个流。我们使用的 PCG 系列特定成员是 PCG CM DXSM 128/64。它与 PCG64 的区别在于:它使用了更强大的 DXSM 输出函数、LCG 中 64 位的“廉价乘数”,并且在推进状态之前输出(而非先推进后输出)。

PCG64DXSM 提供了一个胶囊(capsule),其中包含用于生成双精度浮点数、32 位和 64 位无符号整数的函数指针。这些函数无法在 Python 中直接使用,必须由 Generator 或其他支持底层访问的对象来调用。

支持 advance 方法,可以将随机数生成器(RNG)推进任意步数。PCG-64 DXSM RNG 的状态由 2 个 128 位无符号整数表示。

状态和种子

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

输入的种子通过 SeedSequence 处理以生成这两个值。该增量无法独立设置。

并行特性

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

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

兼容性保证

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

参考

状态#

state

获取或设置 PRNG 状态

并行生成#

advance(delta)

在底层 RNG 上推进,如同已经进行了 delta 次抽取。

jumped([jumps])

返回一个新的位生成器,其状态已跳转。

扩展#

cffi

CFFI 接口

ctypes

ctypes 接口