You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python按不同概率从两个高斯分布采样出现报错如何解决

问题原因与修复方案

错误根因

你代码的核心问题是混淆了scipy分布对象和分布生成的样本数组的区别:

  • norm.rvs()是生成样本的方法,执行后会直接返回numpy格式的样本数组,而非可重复调用生成样本的分布对象,因此数组不存在rvs方法,触发属性报错。
  • 原有代码逻辑存在冗余:你预生成的size=5的样本没有被实际使用,和你要生成100个样本的需求不匹配。

正确实现

与原有逻辑对齐的写法

from scipy.stats import norm
import numpy as np

# 定义两个高斯分布对象,暂不生成样本
x = [norm(0, 1), norm(10, 1)]
# 按0.7、0.3的概率选择对应的分布
draw = np.random.choice([0, 1], 100, p=[0.7, 0.3])
# 对选中的分布调用rvs生成单个样本
y = [x[i].rvs() for i in draw]
z = np.array(y)

性能更优的向量化实现(避免循环)

from scipy.stats import norm
import numpy as np

# 生成选择掩码,True对应选第一个分布,False对应选第二个
mask = np.random.choice([True, False], 100, p=[0.7, 0.3])
z = np.empty(100)
z[mask] = norm.rvs(0, 1, size=mask.sum())
z[~mask] = norm.rvs(10, 1, size=(~mask).sum())

内容的提问来源于stack exchange,提问作者Nanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:54:04