Numpy 随机数
numpy.random 模块对 Python 内置的 random 进行了补充,增加了一些用于高效生成符合多种概率分布的样本值的函数。这一小节将详述如何用 Numpy 快速创建随机数矩阵。
1. 创建符合均匀分布的随机数组
1.1 numpy.random.rand 函数
numpy.random.rand 函数通常用来创建一个服从 “0~1” 均匀分布的随机浮点数(组),随机样本取值范围是[0,1)。函数调用方法如下:
numpy.random.rand(d0, d1, ..., dn)
构造函数接受的参数详解如下:
参数 | 描述 |
---|---|
d0, d1, …, dn | 表征生成数组的维数,若不指定则默认返回一个浮点数。 |
案例
最简单的情况,当不指定任何参数的时候,生成 0-1 之间的随机浮点数:
np.random.rand()
Out:
0.014109814461294223
相应地,也可以指定产生一个固定维度的数组,例如希望生成一个指定维度为 3×2,服从 “0-1” 均匀分布的数组,可以用如下语句顺利实现:
np.random.rand(3, 2)
Out:
array([[0.14222306, 0.63311185],
[0.01911767, 0.91424813],
[0.86915706, 0.23034553]])
1.2 numpy.random.uniform 函数
numpy.random.uniform 函数可以用来创建一个在指定区间内符合均匀分布的随机数(组)。函数调用方法如下:
numpy.random.uniform(low=0.0, high=1.0, size=None)
构造函数接受的参数详解如下:
参数 | 描述 |
---|---|
low | 采样下界,默认值为0; |
high | 采样上界,默认值为1;采样区间为[low, high) |
size | 样本维数,为int或tuple类型 |
案例
在默认情况下,即无任何传参的时候,numpy.random.uniform 和 numpy.random.rand 函数效果类似:
np.random.uniform()
Out:
0.01472448451244368
其功能都是产生一个 0-1 之间随机浮点数。
在实际应用中,uniform 函数的功能更加强大一些。例如,可以创建一个在0-10之间均匀采样的4×4方阵:
np.random.uniform(0, 10, size=(4,4))
Out:
array([[9.4065469 , 3.38814606, 7.76009959, 5.56976042],
[5.39726103, 5.99217826, 1.42095879, 6.53239593],
[7.41342354, 0.91189054, 9.27952511, 5.98864329],
[1.26426182, 9.541969 , 3.74923191, 5.0722331 ]])
1.3 numpy.random.randint 函数
numpy.random.randint 函数可以用来创建一个在指定区间内符合均匀分布的随机整数(数组)。函数调用方法如下:
numpy.random.randint(low, high=None, size=None, dtype='l')
构造函数接受的参数详解如下:
参数 | 描述 |
---|---|
low | 采样下界,整数类型。当high不指定时,采样区间为[0, low) |
high | 采样上界,可选。采样区间为[low, high) |
size | 样本维数,为int或tuple类型 |
dtype | 数组数据类型,可选 |
案例
在只指定 low 参数的时候,可以用来产生一个随机整数:
np.random.randint(10)
Out:
5
类似地,也可以在更大范围内采样。例如,对 0-100 之间整数均匀采样:
np.random.randint(0, 100, size=10, dtype=np.int16)
Out:
array([ 9, 59, 47, 52, 50, 16, 49, 20, 82, 0], dtype=int16)
可以观察发现:size 取整数值时,返回结果为一维数组。
2. 创建符合正态分布的随机数组
正态分布是一种更为常见的特征分布。Numpy 也提供了相应的函数。
2.1 numpy.random.randn函数
numpy.random.randn 函数可以用来创建一个指定维度的、符合标准正态分布(以0为均值、1为标准差)的浮点数(数组)。函数调用方法如下:
numpy.random.randn(d0, d1, ..., dn)
构造函数接受的参数详解如下:
参数 | 描述 |
---|---|
d0, d1, …, dn | 表征生成数组的维数,若不指定则默认返回一个浮点数。 |
案例
最简单的情况,当不指定任何参数的时候,生成 0-1 之间的随机浮点数:
np.random.randn()
Out:
-0.12290005859272764
相应地,也可以指定产生一个固定维度的数组,例如希望生成一个指定维度为 3×2,服从 “0-1” 均匀分布的数组,可以用如下语句顺利实现:
np.random.randn(3, 2)
Out:
array([[-0.57391562, 0.06713778],
[ 1.06383981, -0.36837876],
[ 1.21325918, 2.83456824]])
可以发现,numpy.random.randn 函数和 numpy.random.rand 函数的调用规则非常相似,不同的地方在于产生随机数的分布不一样。
2.2 numpy.random.normal函数
numpy.random.normal 函数可以用来创建一个指定维度的、符合指定正态分布(以loc为均值、scale为标准差)的浮点数(数组)。函数调用方法如下:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
构造函数接受的参数详解如下:
参数 | 描述 |
---|---|
loc | 采样样本分布的均值 |
scale | 采样样本分布的标准差 |
size | 样本维数,为int或tuple类型 |
案例
在不指定均值和标准差的时候,numpy.random.normal 会产生一个符合标准正态分布的浮点数:
np.random.normal()
Out:
-0.8810020954896429
相应地,也可以指定分布特征。例如:产生一个大小为 3×2,符合均值为 5,标准差为 10 的正态分布的数组:
arr_rand3 = np.random.normal(5, 10, (3, 2))
Out:
array([[ -7.77480714, -2.68529581],
[ 4.40425363, -8.39891281],
[-13.08126657, -9.74238828]])
3. 小结
本节主要介绍了利用 Numpy 内置的 random 方法,创建均匀分布和正态分布的数组。和 Python 内置的 random 模块不同的是,在 Numpy 中,你可以指定 size 参数,来快速生成数组集合,效率较random 模块有了很大的提升。
- 还没有人评论,欢迎说说您的想法!