我正在尝试模拟由特定概率分布生成的大量数字。由于代数众多,代码非常慢并且使用了我所有的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()
任何提高效率的想法?