排列同余生成器 (64-bit, PCG64)#

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

PCG-64 伪随机数生成器的 BitGenerator.

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

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

注释

PCG-64 是 O’Neill 的排列同余生成器的 128 位实现 ([1], [2] ). PCG-64 的周期为 \(2^{128}\) ,并支持推进任意数量的步长以及 \(2^{127}\) 个流. 我们使用的 PCG 系列的具体成员是论文中描述的 PCG XSL RR 128/64 ( [2] ).

PCG64 提供了一个包含函数指针的胶囊,这些函数指针生成双精度浮点数以及无符号 32 位和 64 位整数. 这些不能直接在 Python 中使用,必须由 Generator 或类似支持底层访问的对象使用.

支持方法 advance ,可以使 RNG 前进任意步数.PCG-64 RNG 的状态由 2 个 128 位无符号整数表示.

状态和播种

PCG64 状态向量由 2 个无符号 128 位值组成,这些值在外部表示为 Python 整数.一个是 PRNG 的状态,它由线性同余生成器 (LCG) 推进.第二个是 LCG 中使用的固定奇数增量.

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

并行特性

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

>>> 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)

好像发生了 delta 次抽取一样,推进底层 RNG.

jumped ([jumps])

返回一个状态已跳转的新位生成器.

扩展#

cffi 

CFFI 接口

ctypes 

ctypes 接口