如何使用random.poisson从大量整数中抽取泊松分布样本?
用
np.random.poisson替代np.random.binomial实现大样本小概率抽样 嘿,这个需求刚好踩中了二项分布和泊松分布的经典近似场景!当你有极大的总数量X(比如这里的10^8)和较小的抽样概率p时,二项分布Binomial(n,p)可以用泊松分布Poisson(λ)完美近似,这是统计学里的泊松近似定理,完全适配你的场景。
具体实现方法
- 先计算泊松分布的核心参数λ:也就是总数量X乘以抽样概率p,即
λ = X * p - 直接调用
np.random.poisson(),把计算好的λ传入lam参数即可生成符合要求的样本
对应代码如下:
import numpy as np X = 10**8 p = 0.05 lam = X * p # 这里计算结果为5e6 s = np.random.poisson(lam=lam)
为什么这个方法可行?
当n(这里的X)极大、p很小,且λ = n*p是一个大小适中的数值时,二项分布的概率分布会和泊松分布几乎重合。比如你举的例子里,X=1e8,p=0.05,λ=5e6,两种方法生成的样本在均值、方差等统计特性上几乎没有差异——而且泊松抽样在计算效率上可能更优,毕竟不需要处理超大的n值。
小提醒
如果你的抽样概率p不算小,或者总数量X没有那么大,这个近似的准确性会下降,但你的场景完全满足泊松近似的条件,放心用就好~
内容的提问来源于stack exchange,提问作者Joana
相关产品推荐
相关产品推荐

