推荐的通用发电机为 PCG64 . 在大多数平台上,它具有统计上的高质量、全功能和快速性,但在为32位进程编译时有些慢。
PCG64
Philox 它的速度相当慢,但是它的统计特性具有很高的质量,并且通过使用唯一的密钥很容易获得可靠的独立流。如果这是您希望用于并行流的样式,或者您正在从使用该样式的另一个系统进行移植,那么 Philox 是你的选择。
Philox
SFC64 在统计上质量很高,速度也很快。然而,它缺乏跳跃性。如果你不想在32位上使用这个功能,那么很多进程都不需要。
SFC64
MT19937 fails some statistical tests 与现代的prng相比,速度也不是特别快。出于这些原因,我们通常不建议单独使用它,只通过遗留系统使用它 RandomState 用于重现旧结果。也就是说,在许多系统中,它作为默认值有很长的历史。
MT19937
RandomState
以下计时是从特定分布产生1个随机值的时间(单位:ns)。原版 MT19937 生成器的速度要慢得多,因为它需要2个32位的值来等于更快的生成器的输出。
整数性能具有类似的顺序。
对于其他更复杂的生成器,模式类似。遗产的正常表现 RandomState 由于它使用的是Box-Muller变换,而不是Ziggurat发生器,所以它比另一个低得多。指数函数的性能差距也很大,这是由于计算对数函数以反转CDF的成本造成的。标记为MT19973的列与使用的32位生成器相同 RandomState 但是使用 Generator .
Generator
MT19937型
PCG64型
菲洛克斯
SFC64型
32位无符号整数
3.2
2.7
4.9
64位无符号整数
5.6
3.7
6.3
2.9
5.7
制服
7.3
4.1
8.1
3.1
法线
13.1
10.2
13.5
7.8
34.6
指数
7.9
5.4
8.5
40.3
伽马
34.8
28.0
34.7
25.1
58.1
二项式
25.0
21.4
26.1
19.5
25.2
花边
45.1
40.7
45.5
38.1
45.6
泊松
67.6
52.4
69.2
46.4
78.1
下表以百分比表示性能与传统生成器生成的值之间的关系, RandomState(MT19937()) . 使用几何平均值计算总体性能。
RandomState(MT19937())
101
121
67
102
156
91
199
100
179
90
235
263
338
257
443
507
752
474
985
167
207
231
118
96
129
112
120
116
149
113
168
总体
144
192
132
225
注解
所有计时都是在i5-3570处理器上使用Linux进行的。
由于编译器和硬件可用性(例如寄存器宽度)的差异,不同平台的性能有所不同。已选择默认位生成器以在64位平台上运行良好。32位操作系统的性能有很大的不同。
所报告的值相对于各表中MT19937的速度进行了标准化。值100表示性能与MT19937匹配。值越高,表示性能越好。这些值不能跨表进行比较。
分布
119.8
67.7
120.2
152.9
90.8
213.3
179.0
87.0
232.0
128.5
99.2
167.8
148.3
93.0
189.3
Overall
144.3
86.8
180.0
在64位Linux和64位Windows上的相对性能大致相似。
129.1
35.0
135.0
146.9
35.7
176.5
165.0
37.0
192.0
48.5
158.0
151.6
39.0
172.8
143.6
38.7
165.7
由于寄存器宽度的原因,64位生成器在32位Windows上的性能远远低于64位操作系统上的性能。MT19937是NumPy自2005年以来推出的一款基于32位整数的生成器。
30.5
21.1
77.9
26.3
19.2
97.0
23.0
106.0
40.1
31.3
112.6
33.7
109.8
31.4
23.8
99.8
Linux计时使用了ubuntu18.04和gcc7.4。Windows定时使用微软C/C++优化编译器版本19(Visual Studio 2015)在Windows 10上进行。所有计时都是在i5-3570处理器上产生的。