2016-07-06 63 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

太棒了。正是我在找什麼。謝謝。 –