Numpy random模块生成随机数
在做某些实验或者验证某些算法的时候,我们需要模拟一些数据,Nump y中就提供了这样的方法。
常用随机数可以生成单个数或者任意维度的数组。我们还可以使用 choice 方法随机抽取数值,或者使用 permutation 方法对数组进行重新排序,后面进行讲解。
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
常用随机数可以生成单个数或者任意维度的数组。我们还可以使用 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])
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。