2016-07-06 60 views
0

在我正在运行的模拟中,我必须从同一个Beta版本中绘制许多值。目前,我正在使用如何在Python中仅评估一次beta版本?

import random 

... 

for i in range(n_Aa): 
    h = random.betavariate(a, b) // With some values for 'a' and 'b' 

... 

但是,此代码非常慢。我认为这是因为测试版发布会一遍又一遍地重新评估,因为它只能被评估一次,因为它在模拟过程中不会改变。有没有办法实现这一目标?

+1

为什么不把它移到for循环之前?或者,你是否想缓存函数被调用的每个a'和'b'的值? – SuperSaiyan

回答

2

你可以试试numpy的random.beta。它似乎要快得多:

import random 
import numpy as np 
n = 10**6 

%timeit [random.betavariate(2, 3) for _ in range(n)] 
1 loop, best of 3: 3.83 s per loop 

%timeit np.random.beta(2, 3, n) 
10 loops, best of 3: 99.7 ms per loop 
+0

太棒了。正是我在找什么。谢谢。 –