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:
相应地,也可以指定产生一个固定维度的数组,例如希望生成一个指定维度为 3×2,服从 “0-1” 均匀分布的数组,可以用如下语句顺利实现:
np.random.rand(, )Out:array([[, ], [, ], [, ]])
1.2 numpy.random.uniform 函数
numpy.random.uniform 函数可以用来创建一个在指定区间内符合均匀分布的随机数(组)。函数调用方法如下:
numpy.random.uniform(low=, high=, size=None)
构造函数接受的参数详解如下:
参数 | 描述 |
---|---|
low | 采样下界,默认值为0; |
high | 采样上界,默认值为1;采样区间为[low, high) |
size | 样本维数,为int或tuple类型 |
案例
在默认情况下,即无任何传参的时候,numpy.random.uniform 和 numpy.random.rand 函数效果类似:
np.random.uniform()Out:
其功能都是产生一个 0-1 之间随机浮点数。
在实际应用中,uniform 函数的功能更加强大一些。例如,可以创建一个在0-10之间均匀采样的4×4方阵:
np.random.uniform(, , size=(,))Out:array([[ , , , ], [, , , ], [, , , ], [, , , ]])
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()Out:
类似地,也可以在更大范围内采样。例如,对 0-100 之间整数均匀采样:
np.random.randint(, , size=, dtype=np.int16)Out:array([ , , , , , , , , , ], 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:-
相应地,也可以指定产生一个固定维度的数组,例如希望生成一个指定维度为 3×2,服从 “0-1” 均匀分布的数组,可以用如下语句顺利实现:
np.random.randn(, )Out:array([[-, ], [ , -], [ , ]])
可以发现,numpy.random.randn 函数和 numpy.random.rand 函数的调用规则非常相似,不同的地方在于产生随机数的分布不一样。
2.2 numpy.random.normal函数
numpy.random.normal 函数可以用来创建一个指定维度的、符合指定正态分布(以loc为均值、scale为标准差)的浮点数(数组)。函数调用方法如下:
numpy.random.normal(loc=, scale=, size=None)
构造函数接受的参数详解如下:
参数 | 描述 |
---|---|
loc | 采样样本分布的均值 |
scale | 采样样本分布的标准差 |
size | 样本维数,为int或tuple类型 |
案例
在不指定均值和标准差的时候,numpy.random.normal 会产生一个符合标准正态分布的浮点数:
np.random.normal()Out:-
相应地,也可以指定分布特征。例如:产生一个大小为 3×2,符合均值为 5,标准差为 10 的正态分布的数组:
arr_rand3 = np.random.normal(, , (, ))Out:array([[ -, -], [ , -], [-, -]])
3. 小结
本节主要介绍了利用 Numpy 内置的 random 方法,创建均匀分布和正态分布的数组。和 Python 内置的 random 模块不同的是,在 Numpy 中,你可以指定 size 参数,来快速生成数组集合,效率较random 模块有了很大的提升。