2016-07-06 6 views
0

In einer Simulation, die ich laufe, muss ich viele viele Werte aus der gleichen Beta-Verteilung zeichnen. Derzeit verwende ichWie Beta-Verteilung nur einmal in Python zu bewerten?

import random 

... 

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

... 

Dieser Code ist jedoch sehr langsam. Ich denke es liegt daran, dass die Beta-Verteilung immer wieder ausgewertet wird, wenn sie nur einmal ausgewertet werden sollte, da sie sich im Laufe der Simulation nicht ändert. Gibt es einen Weg, dies zu erreichen?

+1

Warum verschieben Sie es nicht vor der for-Schleife? Oder möchten Sie die Werte für jedes a und b, für das die Funktion aufgerufen wird, zwischenspeichern? – SuperSaiyan

Antwort

2

Sie können numpys random.beta versuchen. Es scheint viel schneller zu sein:

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

Wunderbar. Genau das, was ich gesucht habe. Vielen Dank. –