在数据分析、统计模拟以及机器学习中,经常需要生成随机数。例如:

• 生成随机样本

• 构造模拟数据

• 初始化模型参数

• 实现随机抽样

NumPy 提供了一组用于随机数生成(random number generation)的函数,可以生成多种概率分布的数据。这些函数主要集中在 numpy.random 模块中。

需要说明的是,从 NumPy 1.17 开始,官方推荐使用新的随机数生成体系()。本文介绍的 numpy.random.* 函数属于传统随机数接口(legacy API),但由于其在大量代码与教材中仍被广泛使用,因此仍具有重要学习价值。

按照功能划分,NumPy 的随机数函数通常可以分为五类:

(1)随机数生成器控制

(2)均匀分布随机数

(3)整数随机数

(4)随机抽样与排列

(5)常见概率分布

一、随机数生成器控制

在进行随机数计算时,经常需要固定随机数序列,以便实验结果可以复现。

seed()

设置随机数种子(Random Seed)。

numpy.random.seed(seed)

参数说明:

• seed:整数种子值

示例:

np.random.rand(3)

输出示例:

[0.37454012 0.95071431 0.73199394]

说明:设置相同的 seed,在相同的 NumPy 版本与实现下通常可以复现相同的随机序列。

二、均匀分布随机数

均匀分布(Uniform Distribution)是最常见的随机数类型。

NumPy 中部分函数名称并未直接体现 “uniform”,例如 rand() 与 random(),但它们本质上都生成 [0,1) 区间的均匀分布随机数。

rand()

生成 [0, 1) 区间的均匀分布随机数。

numpy.random.rand(d0, d1, ..., dn)

参数说明:

• d0, d1, ...:输出数组的形状

示例:

np.random.rand(2,3)

输出示例:

 [0.44 0.32 0.77]]

说明:返回值范围为 0 ≤ x < 1。

random()

生成 [0,1) 区间的均匀分布随机数。

numpy.random.random(size=None)

参数说明:

• size:输出数组形状

示例:

np.random.random((2,3))

uniform()

生成指定区间的均匀分布随机数。

numpy.random.uniform(low=0.0, high=1.0, size=None)

参数说明:

• low:最小值(包含)

• high:最大值(通常不包含)

• size:输出数组形状

示例:

np.random.uniform(10, 20, size=5)

输出示例:

[13.4 17.1 10.8 19.2 15.6]

三、整数随机数

NumPy 还可以生成随机整数。

randint()

生成指定范围的随机整数。

numpy.random.randint(low, high=None, size=None, dtype=int)

参数说明:

• low:最小值(包含)

• high:最大值(不包含)

• size:输出数组形状

• dtype:输出整数的数据类型

示例:

np.random.randint(0, 10, size=5)

输出示例:

[3 7 1 9 0]

说明:生成范围为 low ≤ x < high。

四、随机抽样与排列

NumPy 提供了一组函数,用于随机抽样和随机排列。

choice()

从数组中随机选择元素。

numpy.random.choice(a, size=None, replace=True, p=None)

参数说明:

• a:数组或整数;若为整数 n,则表示从 0~n-1 中选择

• size:抽样数量

• replace:是否允许重复抽样

• p:概率分布,应与 a 的长度一致,且概率和为 1

示例:

np.random.choice([10,20,30,40], size=3)

输出示例:

[20 40 10]

permutation()

生成随机排列。

numpy.random.permutation(x)

参数说明:

• x:整数或数组

如果 x 为数组,则返回数组元素的随机排列。

示例:

np.random.permutation(5)

输出示例:

[3 0 4 1 2]

shuffle()

原地打乱数组顺序。

numpy.random.shuffle(x)

参数说明:

• x:输入数组

示例:

print(a)

说明:shuffle() 会直接修改原数组。对多维数组,shuffle() 只会打乱第一轴(行顺序)。

五、常见概率分布

NumPy 可以生成多种概率分布数据。

normal()

生成正态分布随机数(Normal Distribution)。

numpy.random.normal(loc=0.0, scale=1.0, size=None)

参数说明:

• loc:均值

• scale:标准差

• size:输出数组形状

示例:

np.random.normal(0, 1, size=5)

说明:默认参数时生成标准正态分布。标准正态分布常用于描述自然随机误差、统计推断以及机器学习中的数据标准化与随机初始。

binomial()

生成二项分布随机数。

numpy.random.binomial(n, p, size=None)

参数说明:

• n:试验次数

• p:成功概率

• size:输出数组形状

示例:

np.random.binomial(10, 0.5, size=5)

说明:二项分布常用于描述 n 次独立试验中的成功次数。

poisson()

生成泊松分布随机数。

numpy.random.poisson(lam=1.0, size=None)

参数说明:

• lam:平均发生次数

• size:输出数组形状

示例:

np.random.poisson(3, size=5)

说明:泊松分布常用于描述单位时间或单位空间内事件发生次数。

exponential()

生成指数分布随机数。

numpy.random.exponential(scale=1.0, size=None)

参数说明:

• scale:尺度参数

• size:输出数组形状

示例:

np.random.exponential(1.0, size=5)

说明:指数分布常用于描述事件发生之间的时间间隔。

gamma()

生成 Gamma 分布随机数。

numpy.random.gamma(shape, scale=1.0, size=None)

参数说明:

• shape:形状参数

• scale:尺度参数

• size:输出数组形状

示例:

np.random.gamma(2.0, 2.0, size=5)

说明:Gamma 分布常用于描述等待时间、事件累计时间以及作为贝叶斯统计中的先验分布。

beta()

生成 Beta 分布随机数。

numpy.random.beta(a, b, size=None)

参数说明:

• a:形状参数 α

• b:形状参数 β

• size:输出数组形状

示例:

np.random.beta(2, 5, size=5)

说明:Beta 分布常用于概率建模与贝叶斯统计。

chisquare()

生成卡方分布随机数。

numpy.random.chisquare(df, size=None)

参数说明:

• df:自由度

• size:输出数组形状

示例:

np.random.chisquare(3, size=5)

说明:卡方分布常用于统计检验与方差分析。

lognormal()

生成对数正态分布随机数。

numpy.random.lognormal(mean=0.0, sigma=1.0, size=None)

参数说明:

• mean:对数均值

• sigma:对数标准差

• size:输出数组形状

示例:

np.random.lognormal(0, 1, size=5)

说明:若变量的对数服从正态分布,则该变量服从对数正态分布。

小结

NumPy 在 numpy.random 模块中提供了一套传统随机数生成函数体系,包括均匀分布随机数(rand、uniform)、随机整数(randint)、随机抽样与排列(choice、permutation、shuffle),以及多种概率分布(如 normal、binomial、poisson、gamma、beta、chisquare、lognormal 等)。这些函数构成了 NumPy 在统计模拟、数据分析与机器学习实验中的基础工具。

打开网易新闻 查看精彩图片

点赞有美意,赞赏是鼓励