Ich mag gamma verteilte Zufallsvariablen mit scipy.stats.gamma.rvsWrapping Funktion verschiedene paremetres in Python verwenden
jedoch erzeugen, wobei die API übernimmt Form und Skalenparameter als Eingabe und ich mag Mittelwert und Standardabweichung als Eingabe verwenden.
Ich könnte einen Wrapper schreiben, der Mittelwert und Standard als Eingabe, berechnete Skalierung und Form und dann verwendet gamma.rvs, um die Zufallsvariable zu generieren. Aber ich erwarte viele Aufrufe dieser Funktion, daher würde ich es vorziehen, wenn ich die Berechnung nicht jedes Mal machen müsste.
kam ich auf die folgende Lösung:
from scipy.stats import gamma
def gamma_rvs_generator(mu, sigma):
var = sigma ** 2
scale = var/mu
a = mu/scale
return lambda: gamma.rvs(a=a, scale=scale)
if __name__ == '__main__':
gen = gamma_rvs_generator(10, 10)
print(gen())
Welche genau funktioniert genauso, wie ich es arbeiten wollen. Aber ich wollte fragen, ob es dafür bessere/mehr pythonische Lösungen gibt.
eine alternative Möglichkeit wäre die Bearbeitung der API aber gut, das ist nicht der Fall. Übrigens, warum benutzt du 'Lambda'? – magicleon
@magicleon Das macht es zu einer Funktion mit '0' Argumenten, die wiederholt aufgerufen werden können, erzeugen Sie jedes Mal eine andere Zufallszahl. Ohne das "Lambda" würde es eine einzelne Zufallszahl zurückgeben und somit erfordern, dass der Wrapper mit jeder neuen Zufallszahl wiederholt wird. –
oh, wie ein Konstruktor? Nett! – magicleon