【SciPy】scipy.stats.norm.rvs() 函数:从正态分布(高斯分布)中生成随机样本

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) xN(μ,σ2)

我们可以使用 norm.rvs 生成样本:

from scipy.stats import norm

# 满条件分布的参数
mu = 2.5
sigma = 0.8

# 从正态分布中抽取一个样本
sample = norm.rvs(loc=mu, scale=sigma)
print(sample)

4. 注意事项

  1. 参数含义

    • loc 是均值 μ \mu μscale 是标准差 σ \sigma σ。两者必须正确设定,特别是 scale 必须为正值,否则会报错。
  2. 随机数种子

    • 如果希望生成的随机样本具有可重复性,设置 random_state 非常重要。
  3. numpy.random.normal 的对比

    • numpy.random.normal 也可以生成正态分布随机样本,但 scipy.stats.norm.rvs 是基于 SciPy 的概率分布对象,支持更丰富的分布功能。

5. 总结

scipy.stats.norm.rvs 是用于生成正态分布随机样本的便捷函数,其灵活性在于支持多维采样、随机种子设置等功能。无论是进行数学模拟、统计建模,还是在吉布斯抽样或其他 MCMC 方法中,norm.rvs 都是不可或缺的工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值