随机数生成

numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。例如,你可以用normal来得到一个标准正态分布的4×4样本数组:

  1. In [208]: samples = np.random.normal(size=(4, 4))
  2.  
  3. In [209]: samples
  4. Out[209]:
  5. array([[ 0.1241, 0.3026, 0.5238, 0.0009],
  6. [ 1.3438, -0.7135, -0.8312, -2.3702],
  7. [-1.8608, -0.8608, 0.5601, -1.2659],
  8. [ 0.1198, -1.0635, 0.3329, -2.3594]])

而Python内置的random模块则只能一次生成一个样本值。从下面的测试结果中可以看出,如果需要产生大量样本值,numpy.random快了不止一个数量级:

  1. In [210]: from random import normalvariate
  2.  
  3. In [211]: N = 1000000
  4.  
  5. In [212]: %timeit samples = [normalvariate(0, 1) for _ in xrange(N)]
  6. 1 loops, best of 3: 1.33 s per loop
  7.  
  8. In [213]: %timeit np.random.normal(size=N)
  9. 10 loops, best of 3: 57.7 ms per loop

表4-8列出了numpy.random中的部分函数。在下一节中,我将给出一些利用这些函数一次性生成大量样本值的范例。

随机数生成 - 图1

随机数生成 - 图2