梅森捻线机(MT19937)

class numpy.random.MT19937(seed=None)

梅森捻线机伪随机数发生器的容器。

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

初始化的种子 BitGenerator . 如果没有,那么新的,不可预测的熵将从操作系统中提取。如果 intarray_like[ints] 如果通过了,那么它将被传递给 SeedSequence 导出初始值 BitGenerator 州。你也可以通过 SeedSequence 实例。

笔记

MT19937 提供包含生成双精度、无符号32位和64位整数的函数指针的胶囊 [1]. 它们在Python中不能直接使用,必须由 Generator 或支持低级访问的类似对象。

Python stdlib模块“random”还包含Mersenne Twister伪随机数生成器。

状态和种子

这个 MT19937 状态向量由一个由32位无符号整数组成的624元素数组加上一个0到624之间的单个整数值组成,该整数值用于索引主数组中的当前位置。

输入种子由 SeedSequence 填满整个州。第一个元素被重置,以便只设置其最高有效位。

平行特征

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

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

另一种方法是 MT19937.jumped 使国家进步好像 2^{{128}} 已生成随机数 ([1], [2]) . 这允许拆分原始序列,以便在每个工作进程中使用不同的段。所有生成器都应该链接起来,以确保这些段来自相同的序列。

>>> from numpy.random import Generator, MT19937, SeedSequence
>>> sg = SeedSequence(1234)
>>> bit_generator = MT19937(sg)
>>> rg = []
>>> for _ in range(10):
...    rg.append(Generator(bit_generator))
...    # Chain the BitGenerators
...    bit_generator = bit_generator.jumped()

兼容性保证

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

工具书类

1(1,2)

Hiroshi Haramoto、Makoto Matsumoto和Pierre L'Ecuyer,“多项式空间中线性递归的快速跳前算法”,序列及其应用-SETA,290--2982008。

2

Hiroshi Haramoto、Makoto Matsumoto、Takuji Nishimura、François Panneton、Pierre L'Ecuyer,“F2线性随机数生成器的有效提前跳转”,通知计算杂志,第20卷,第3期,2008年夏季,第385-390页。

属性
锁定:螺纹。锁紧

锁定共享的实例,以便同一位git生成器可以在多个生成器中使用,而不会损坏状态。从位生成器生成值的代码应该保持位生成器的锁。

state 

获取或设置PRNG状态

并联发电

jumped \ [jumps] )

返回状态为跳转的新位生成器

延伸

cffi 

CFFI接口

ctypes 

ctypes接口