轻松计算概率分布函数的逆

时间:2017-08-22 10:56:56

标签: python optimization statistics probability distribution

我正在尝试模拟由特定概率分布生成的大量数字。由于代数众多,代码非常慢并且使用了我所有的RAM。

如果我使用正态分布生成数字,使用scipy.stats.norm.ppf(random.random()),代码很容易执行,这就是为什么我知道问题来自于此。

我想到的唯一方法是创建一个函数,在某个点给出CDF的分布并优化它以找到它到达随机生成的数字的位置:

def mytwofunctions():
    def hansenPDF (z,x):
        heta = 2.1+27.9/exp(-x[3])
        c = math.gamma((heta+1)/2)/(sqrt(math.pi*(heta-2))*math.gamma(heta/2))
        a = 4*x[3]*c*(heta-2)/(heta-1)
        b = sqrt(1+3*x[3]**2-a**2)

        if z < -a/b:
            g = b*c*(1+1/(heta-2)*((b*z+a)/(1-x[3]))**2)**(-(heta+1)/2)
        else:
            g = b*c*(1+1/(heta-2)*((b*z+a)/(1+x[3]))**2)**(-(heta+1)/2)

        return g

    def integrator (z):
        return integrate.quad(hansenPDF,-100,z,args=(optimparams[-1]))[0] - random.random()

任何提高效率的想法?

0 个答案:

没有答案