Python如何生成x从0开始计数的几何分布随机样本
0起始几何分布采样实现方案
两种几何分布仅存在计数偏移,核心概率逻辑完全一致:
numpy.random.geometric生成的是首次成功时的总试验次数,取值域为1,2,3...,对应PMF为 $P(X=k) = p(1-p)^{k-1}$- 你需要的是首次成功前的失败次数,取值域为0,1,2...,对应PMF为 $P(Y=k) = p(1-p)^{k}$
方案1:直接偏移numpy生成结果(推荐,无额外依赖)
两个随机变量满足 $Y = X - 1$,直接对numpy的采样结果减1即可,统计特性完全匹配目标分布:
import numpy as np p = 0.3 # 生成100个符合要求的0起始几何分布样本 samples = np.random.geometric(p=0.3, size=100) - 1
校验:原分布取1的概率为p,偏移后对应取值0的概率p;原分布取k的概率为$p(1-p){k-1}$,偏移后对应取值k-1的概率$p(1-p){(k-1)}$,和目标PMF完全吻合。
方案2:Scipy内置参数调整实现
如果你的项目已经依赖Scipy,可以直接通过loc参数平移分布实现,不需要手动做减法:
from scipy.stats import geom p = 0.3 samples = geom.rvs(p=0.3, loc=-1, size=100)
注意事项
- 不推荐手写逆变换采样逻辑,numpy、Scipy的内置实现经过充分性能优化,大样本量下速度远快于手写Python循环。
- 两种方案生成的样本分布完全一致,优先选不需要额外安装依赖的偏移法即可。
内容的提问来源于stack exchange,提问作者BTM
相关产品推荐
相关产品推荐

