置换同余生成器 (64位, PCG64 DXSM)#
- class numpy.random.PCG64DXSM(seed=None)#
用于 PCG-64 DXSM 伪随机数生成器的 BitGenerator。
- 参数:
- 种子{None, int, array_like[ints], SeedSequence},可选
用于初始化
BitGenerator
的种子。如果为 None,则将从操作系统获取新的、不可预测的熵。如果传入int
或array_like[ints]
,则会将其传递给SeedSequence
以推导出初始BitGenerator
状态。也可以传入SeedSequence
实例。
注释
PCG-64 DXSM 是 O’Neill 的置换同余生成器 ([1], [2]) 的 128 位实现。PCG-64 DXSM 的周期为 \(2^{128}\),并支持任意步长的前进以及 \(2^{127}\) 个流。我们使用的 PCG 系列的特定成员是 PCG CM DXSM 128/64。它与
PCG64
的不同之处在于,它使用了更强的 DXSM 输出函数,LCG 中使用了一个 64 位的“廉价乘数”,并且在状态前进之前而不是前进之后输出。PCG64DXSM
提供了一个包含函数指针的胶囊,这些函数指针生成双精度浮点数以及无符号的 32 位和 64 位整数。这些不能直接在 Python 中使用,必须由支持低级访问的Generator
或类似对象使用。支持方法
advance
以任意步长推进 RNG。PCG-64 DXSM RNG 的状态由 2 个 128 位无符号整数表示。状态和播种
PCG64DXSM
状态向量由 2 个 128 位无符号值组成,它们在外部表示为 Python 整数。其中一个是 PRNG 的状态,由线性同余生成器 (LCG) 推进。另一个是 LCG 中使用的固定奇数增量。输入种子由
SeedSequence
处理以生成这两个值。增量不可独立设置。并行特性
在并行应用中使用 BitGenerator 的首选方式是使用
SeedSequence.spawn
方法获取熵值,并使用这些熵值生成新的 BitGenerator>>> from numpy.random import Generator, PCG64DXSM, SeedSequence >>> sg = SeedSequence(1234) >>> rg = [Generator(PCG64DXSM(s)) for s in sg.spawn(10)]
兼容性保证
PCG64DXSM
保证固定的种子将始终产生相同的随机整数流。参考
[2]O’Neill, Melissa E. “PCG:一种简单、快速、空间高效、统计上优秀的随机数生成算法家族”
状态#
获取或设置 PRNG 状态 |