2016-07-06 9 views
0

私が実行しているシミュレーションでは、同じベータ版から多くの値を引き出す必要があります。現在、使用していますPythonでベータ版を一度だけ評価するには?

import random 

... 

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

... 

このコードは非常に遅いです。私は、ベータ分布が何度も​​評価されているので、シミュレーションの過程で変化しないので、一度評価することができるからだと思います。これを達成するための方法はありますか?

+1

なぜあなたはforループの前に移動しませんか?あるいは、関数が呼び出されるすべての 'と' 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

素敵です。まさに私が探していたもの。ありがとう。 –

関連する問題