NumPy参考 >例行程序 >Random sampling (numpy.random) >Bit Generators > MT19937
numpy.random.
MT19937
(seed = None )¶Mersenne Twister伪随机数生成器的容器。
初始化的种子BitGenerator
。如果为None,则将从操作系统中提取新鲜的,不可预测的熵。如果传递了int
或
array_like[ints]
,则将传递
SeedSequence
以获得初始BitGenerator
状态。一个SeedSequence
实例也可能通过。
笔记
MT19937
提供了一个胶囊,其中包含产生双精度值的函数指针以及无符号的32位和64位整数[1]。这些在Python中不可直接使用,必须由Generator
支持低级访问的一个或类似对象使用。
Python stdlib模块“随机”还包含Mersenne Twister伪随机数生成器。
状态与播种
该MT19937
状态向量包括32位无符号整数一个624个元素的数组加一个整数值的0和624的索引主阵列内的当前位置。
输入的种子将被处理SeedSequence
以填充整个状态。重置第一个元素,以便仅设置其最高有效位。
平行功能
在并行应用程序中使用BitGenerator的首选方法是使用该SeedSequence.spawn
方法获取熵值,并使用它们生成新的BitGenerator:
>>> from numpy.random import Generator, MT19937, SeedSequence
>>> sg = SeedSequence(1234)
>>> rg = [Generator(MT19937(s)) for s in sg.spawn(10)]
MT19937.jumped
如果已经生成随机数,则使用另一种方法来推进状态
([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
保证种子是固定的,并且将始终产生相同的随机整数流。
参考文献
原本博,松本诚和Pierre L'Ecuyer,“多项式空间中线性递归的快速跳跃算法”,序列及其应用-SETA,290-298,2008年。
原本博史,松本诚,西村拓uji,弗朗索瓦·潘尼通,皮埃尔·拉厄尔(Pierre L'Ecuyer),“ F2线性随机数发生器的有效前行”,《计算机科学与信息杂志》,第1卷。20,第3号,2008年夏季,第385-390页。
共享的锁实例,以便同一位git generator可以在多个Generator中使用,而不会破坏状态。从位生成器生成值的代码应持有位生成器的锁。