我想从二项分布 B(n,p) 中采样,但有一个额外的约束,即采样值属于 [a,b] 范围(而不是正常的 0 到 n 范围)。换句话说,我必须从二项分布中采样一个值,因为它位于 [a,b] 范围内。在数学上,我可以将这个分布 ( f(x)
) 的 pmf 用二项分布的 pmfbin(x) = [(nCx)*(p)^x*(1-p)^(n-x)]
写成
sum = 0
for i in range(a,b+1):
sum += bin(i)
f(x) = bin(x)/sum
从该分布中采样的一种方法是对均匀分布的数字进行采样并应用 CDF 的倒数(使用 pmf 获得)。但是,我认为这不是一个好主意,因为 pmf 计算很容易变得非常耗时。
在我的情况下,的值n,x,a,b
非常大,这种计算 pmf 然后使用统一随机变量生成样本的方式似乎效率极低,因为nCx
.
实现这一目标的好方法/有效方法是什么?