首页 > 编程笔记

Numpy random模块生成随机数

在做某些实验或者验证某些算法的时候,我们需要模拟一些数据,Nump y中就提供了这样的方法。

常用随机数可以生成单个数或者任意维度的数组。我们还可以使用 choice 方法随机抽取数值,或者使用 permutation 方法对数组进行重新排序,后面进行讲解。

1. random.rand()

random 中的 rand 方法可以用来生成在 [0,1] 上的一个随机数。可以通过rand方法传入一个int类型的参数,指定生成多少个随机数。
In [2]: np.random.rand() # 生成在[0,1]上的数
Out[2]: 0.1986842523534006
In [3]: np.random.rand(10)  # 生成10个随机数
Out[3]: 
array([0.17682141, 0.87976073, 0.68461756, 0.7232145 , 0.15628708,
       0.78452399, 0.52846538, 0.18362267, 0.89372265, 0.42307524])
当 rand 方法传入一个 int 类型的数时生成的是一个序列的随机数,此外还可以传入一个数组,生成一个数组的随机数。
In [4]: np.random.rand(3,3)  # 生成3行3列的随机数组
Out[4]: 
array([[0.64493183, 0.00448995, 0.84254601],
       [0.60914721, 0.12523508, 0.43191341],
       [0.64596491, 0.41553648, 0.51056406]]) 

2. random.randn()

randn 方法用来生成一个符合正态分布的随机数。
In [5]: np.random.randn()  # 生成标准正态分布随机数
Out[5]: 0.8158614807731791 
同理,还可以像 rand 函数一样生成一个随机的序列或者生成一个随机的数组。
In [6]: np.random.randn(10)  # 生成10个正态随机数
Out[6]: 
array([-0.0588193 , -0.20587312, -0.04294179, -1.43546252,  0.67783404,
       -0.52949325, -0.84902127,  0.45757084, -0.63645493,  0.4801768 ])
In [7]: np.random.randn(3,3)  # 生成3行3列的标准正态随机数组
Out[7]:
array([[-1.21160869,  0.22677573,  2.26393072],
       [ 0.72706254, -0.59188347,  0.25935329],
       [-0.73485706, -0.49113593,  0.48354441]]) 

3. random.randin()

randint 方法用来生成一个整型的随机数,参数 low 用来指定生成随机数最低的范围,参数 high 用来指定生成随机数最高的范围,参数 size 用来指定生成随机数的形状。默认状态下生成一个 int 类型的随机数。
In [8]: np.random.randint(low=1,high=10)  # 生成[1,10)的随机整数
Out[8]: 5
当 size=10 时,生成一个长度为 10 的序列,序列的元素是 int 类型的随机数。
In [9]: np.random.randint(low=1,high=10,size=10)  # 生成10个随机整数
Out[9]: array([6, 6, 3, 3, 8, 1, 8, 3, 7, 2])
当size是一个元组时,则指定了生成随机数数组的形状,比如可以用(3,3)生成一个元素是随机整型的3行3列的数组。
In [10]: np.random.randint(low=1,high=10,size=(3,3))  # 生成3行3列随机整型数组
Out[10]: 
array([[7, 8, 2],
       [9, 4, 1],
       [1, 9, 3]]) 

4. random.choice()

choice 方法可以用来随机抽取样本,第 1 个参数是要抽取的序列,第 2 个参数是要抽取的次数,这里对序列 [1,2,3,4,5,6] 进行了 5 次重复抽取。
In [11]: np.random.choice([1,2,3,4,5,6],5) # 随机在[1,2,3,4,5,6]中抽取5次元素
Out[11]: array([6, 6, 1, 6, 3])

5. random.permutation()

permutation 方法可以用来对数组进行重新排序。
In [12]: np.random.permutation([1,2,3,4,5,6]) # 随机重排列表
Out[12]: array([4, 5, 1, 6, 2, 3])

6. 分布随机数生成方法汇总

分布随机数生成主要是根据一些特殊的分布(比如正态分布、几何分布等)生成随机分布数组。示例代码如下。
In [1]: import numpy as np
In [2]: np.random.beta(a=1, b=1, size=10)  # 生成10个beta分布数据
Out[2]: 
array([0.00851142, 0.75905532, 0.76899892, 0.54611725, 0.97052232,
       0.965459  , 0.91350042, 0.86334121, 0.38867507, 0.61042938])
In [3]: np.random.binomial(8, 0.3, size=10)  # 生成10个二项分布数据
Out[3]: array([1, 2, 3, 5, 4, 3, 2, 3, 4, 2])
In [4]: np.random.chisquare(3,10)  # 生成10个卡方分布数据
Out[4]: 
array([ 7.48311909, 11.36788416,  3.12726178,  6.56414606,  1.431802  ,
        2.67882163,  0.6913374 ,  6.01912117,  1.01296401,  2.69496303])
In [5]: np.random.exponential(scale=1.0, size=10)  # 生成10个指数分布数据
Out[5]: 
array([0.32344969, 0.09992908, 2.03257126, 0.82349116, 0.67954543,
       1.43258208, 0.86706121, 0.06634798, 1.22617235, 0.62798856])
In [6]: np.random.gamma(3, 1, 10)  # 生成10个伽马分布数据
Out[6]: 
array([1.75410468, 3.65739546, 1.95553422, 2.33124095, 1.95515322,
       5.55806745, 3.74892391, 1.02145079, 3.69793214, 1.84434973])
In [7]: np.random.geometric(p=0.5, size=10)  # 生成10个几何分布数据
Out[7]: array([3, 3, 4, 3, 1, 2, 1, 2, 1, 4])
In [8]: np.random.normal(loc=0, scale=1, size=10)  # 生成10个正态分布数据
Out[8]: 
array([-0.53701554, -0.57117436, -0.73258904, -0.53558725, -0.23270102,
        0.54694032,  1.52433421,  1.70997613, -0.27997385,  0.15001597])
In [9]: np.random.poisson(5, size=10)  # 生成10个泊松分布数据
Out[9]: array([ 6,  5,  3,  2,  8, 10,  5,  6,  7,  8])
In [10]: np.random.uniform(-1,0,size=10)  # 生成10个均匀分布数据
Out[10]: 
array([-0.17687828, -0.89652975, -0.70421999, -0.64142474, -0.20585632,
       -0.74837112, -0.67783048, -0.98292113, -0.38015044, -0.50877065])

优秀文章