在 scipy.stats
模块中,norm.rvs
函数用于从正态分布(高斯分布)中生成随机样本。它是 SciPy 提供的一个非常常用的概率分布采样工具,适合模拟正态分布的随机变量。
1. 函数定义
scipy.stats.norm.rvs(loc=0, scale=1, size=1, random_state=None)
参数说明
-
loc
:
均值 μ \mu μ,即正态分布的中心位置(默认值为 0)。 -
scale
:
标准差 σ \sigma σ,即正态分布的扩展程度或“宽度”(默认值为 1)。注意,scale
必须是正数。 -
size
:
生成随机样本的数量或形状:- 如果是单个整数,如
size=10
,生成 10 个样本; - 如果是元组(如
size=(3, 2)
),生成指定形状的多维数组。 - 默认为
1
,即生成一个标量值。
- 如果是单个整数,如
-
random_state
:
随机数种子:- 如果为
None
,使用全局的随机数生成器; - 如果为整数,则设置随机数种子(便于复现随机结果);
- 如果是
numpy.random.Generator
实例,则使用该生成器。
- 如果为
返回值
返回一个随机样本值或样本数组,大小由 size
参数决定。
2. 使用示例
示例 1:生成单个随机样本
from scipy.stats import norm
# 从标准正态分布 (均值=0, 标准差=1) 中生成一个随机样本
sample = norm.rvs()
print(sample)
输出示例:
0.174532457124
示例 2:指定均值和标准差
# 从正态分布 (均值=5, 标准差=2) 中生成一个随机样本
sample = norm.rvs(loc=5, scale=2)
print(sample)
输出示例:
6.347826482394
示例 3:生成多个样本
# 生成 10 个样本
samples = norm.rvs(loc=5, scale=2, size=10)
print(samples)
输出示例:
[6.1, 4.2, 5.8, 3.5, 6.2, 4.9, 7.4, 3.8, 5.0, 4.3]
示例 4:生成二维数组样本
# 生成形状为 (3, 2) 的随机样本数组
samples = norm.rvs(loc=0, scale=1, size=(3, 2))
print(samples)
输出示例:
[[ 0.513 -0.678]
[ 1.243 0.436]
[-0.327 0.875]]
示例 5:设置随机数种子
# 设置随机种子以复现相同结果
samples = norm.rvs(loc=5, scale=2, size=5, random_state=42)
print(samples)
输出示例:
[4.86508099 3.83057429 6.26513145 5.99521541 4.46307388]
3. 在吉布斯抽样中的应用
在吉布斯抽样中,norm.rvs
常用于从正态分布的满条件分布中采样。假设满条件分布为:
x
∼
N
(
μ
,
σ
2
)
x \sim N(\mu, \sigma^2)
x∼N(μ,σ2)
我们可以使用 norm.rvs
生成样本:
from scipy.stats import norm
# 满条件分布的参数
mu = 2.5
sigma = 0.8
# 从正态分布中抽取一个样本
sample = norm.rvs(loc=mu, scale=sigma)
print(sample)
4. 注意事项
-
参数含义:
loc
是均值 μ \mu μ,scale
是标准差 σ \sigma σ。两者必须正确设定,特别是scale
必须为正值,否则会报错。
-
随机数种子:
- 如果希望生成的随机样本具有可重复性,设置
random_state
非常重要。
- 如果希望生成的随机样本具有可重复性,设置
-
与
numpy.random.normal
的对比:numpy.random.normal
也可以生成正态分布随机样本,但scipy.stats.norm.rvs
是基于 SciPy 的概率分布对象,支持更丰富的分布功能。
5. 总结
scipy.stats.norm.rvs
是用于生成正态分布随机样本的便捷函数,其灵活性在于支持多维采样、随机种子设置等功能。无论是进行数学模拟、统计建模,还是在吉布斯抽样或其他 MCMC 方法中,norm.rvs
都是不可或缺的工具。