对于随机模拟,我需要绘制很多随机数,这些随机数是 beta 二项式分布的。
目前我以这种方式实现它(使用python):
import scipy as scp
from scipy.stats import rv_discrete
class beta_binomial(rv_discrete):
"""
creating betabinomial distribution by defining its pmf
"""
def _pmf(self, k, a, b, n):
return scp.special.binom(n,k)*scp.special.beta(k+a,n-k+b)/scp.special.beta(a,b)
因此对随机数 x 进行采样可以通过以下方式完成:
betabinomial = beta_binomial(name="betabinomial")
x = betabinomial.rvs(0.5,0.5,3) # with some parameter
问题是,对一个随机数进行采样需要 ca。0.5ms,在我的例子中,这主导了整个模拟速度。限制因素是对 beta 函数(或其中的 gamma 函数)的评估。
有谁知道如何加快采样速度?