Numpy 随机数

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 模块有了很大的提升。