随机数生成
numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。例如,你可以用normal来得到一个标准正态分布的4×4样本数组:
- In [208]: samples = np.random.normal(size=(4, 4))
- In [209]: samples
- Out[209]:
- array([[ 0.1241, 0.3026, 0.5238, 0.0009],
- [ 1.3438, -0.7135, -0.8312, -2.3702],
- [-1.8608, -0.8608, 0.5601, -1.2659],
- [ 0.1198, -1.0635, 0.3329, -2.3594]])
而Python内置的random模块则只能一次生成一个样本值。从下面的测试结果中可以看出,如果需要产生大量样本值,numpy.random快了不止一个数量级:
- In [210]: from random import normalvariate
- In [211]: N = 1000000
- In [212]: %timeit samples = [normalvariate(0, 1) for _ in xrange(N)]
- 1 loops, best of 3: 1.33 s per loop
- In [213]: %timeit np.random.normal(size=N)
- 10 loops, best of 3: 57.7 ms per loop
表4-8列出了numpy.random中的部分函数。在下一节中,我将给出一些利用这些函数一次性生成大量样本值的范例。