学科分类
目录
数据分析

随机数模块

与Python的random模块相比,NumPy的random模块功能更多,它增加了一些可以高效生成多种概率分布的样本值的函数。例如,通过NumPy的random模块随机生成一个3行3列的数组,示例代码如下。

In [130]: import numpy as np
In [131]: np.random.rand(3, 3)   # 随机生成一个二维数组
Out[131]: 
array([[0.84507246, 0.69417139, 0.8596695 ],
​     [0.65997549, 0.47116919, 0.82989148],
​     [0.74321602, 0.06350157, 0.20833566]])
In [132]: np.random.rand(2, 3, 3) # 随机生成一个三维数组
Out[132]: 
array([[[0.22736271, 0.57997499, 0.86616374],
​     [0.19391042, 0.28925198, 0.66538324],
​     [0.06265588, 0.27002459, 0.71791743]],
​     [[0.67455806, 0.28524676, 0.26747945],
​     [0.56214369, 0.32784243, 0.29093133],
​     [0.56041467, 0.74910071, 0.99467489]]])

上述代码中,rand()函数隶属于numpy.random模块,它的作用是随机生成N维浮点数组。需要注意的是,每次运行代码后生成的随机数组都不一样。

除此之外,random模块中还包括了可以生成服从多种概率分布随机数的其它函数。表1列举了numpy.random模块中用于生成大量样本值的函数。

表1 random模块的常见函数

函数 描述
seed 生成随机数的种子
rand 产生均匀分布的样本值
randint 从给定的上下限范围内随机选取整数
normal 产生正态分布的样本值
beta 产生Beta分布的样本值
uniform 产生在[0,1]中的均匀分布的样本值

在表1罗列的函数中,seed( )函数可以保证生成的随机数具有可预测性,也就是说产生的随机数相同,它的语法格式如下:

numpy.random.seed(seed=None)

上述函数中只有一个seed参数,用于指定随机数生成时所用算法开始的整数值。当调用seed()函数时,如果传递给seed参数的值相同,则每次生成的随机数都是一样的,如果传递这个参数值,则系统会根据时间来自己选择值,此时每次生成的随机数会因时间差异而不同。

使用seed()函数的示例代码如下。

In [133]: import numpy as np
In [134]: np.random.seed(0)  # 生成随机数的种子
In [135]: np.random.rand(5)  # 随机生成包含5个元素的浮点数组
Out[135]: 
array([ 0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
In [136]: np.random.seed(0)
In [137]: np.random.rand(5)
Out[137]: 
array([ 0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
In [138]: np.random.seed()
In [139]: np.random.rand(5)
Out[139]:
array([0.9641088 , 0.75298789, 0.34224099, 0.43557176, 0.16201295])

由此可见,seed()函数使得随机数具有预见性。当传递的参数值不同或者不传递参数时,则该函数的作用跟rand()函数相同,即多次生成随机数且每次生成的随机数都不同。

点击此处
隐藏目录