SciPy在python3.2中生成gamma分布需要很长时间

2024-06-14 23:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在win7上用Python3.2生成一个截断的gamma分布pdf曲线和直方图。在

import numpy as np
import matplotlib.pyplot as plt
import scipy.special as sps

shape, scale = 2., 2. # mean and dispersion
counter =0
s = []
upper_bound = 4
lower_bound  = 0.5
while (counter <= 1000):
    t = np.random.gamma(shape, scale, 1)
    if (lower_bound <= t <= upper_bound) :   
       s.append(t)
       counter += 1 

 count, bins, ignored = plt.hist(s, 50, normed=True)

 // this part take s very long time
 y = bins**(shape-1)*(np.exp(-bins/scale) /
                  (sps.gamma(shape)*scale**shape))

 plt.plot(bins, y, linewidth=2, color='r')
 plt.show()

我发现下面的代码花费了很长时间,弹出的数字窗口变得没有响应。在

^{pr2}$

如果去掉gamma分布的上下限,它运行得非常快。在

任何帮助都将不胜感激。在


Tags: importpdfasnpcounterpltupperlower
1条回答
网友
1楼 · 发布于 2024-06-14 23:42:27

np.random.gamma的行中,您不需要size=1参数,您只需要一个float,所以只需执行以下操作:

t = np.random.gamma(shape, scale)

因为您生成的每个t都是一个包含1个元素的数组,而您的s是一个大型嵌套数组

您在while循环中所做的已经在截断您的发行版!虽然一种更快的方法是在之后获得所需的范围,即将整个while循环替换为:

^{pr2}$

相关问题 更多 >