scipy
rv_continuous für die Verteilung mit Parametern
Suche…
Negatives Binomial auf positiven Realen
from scipy.stats import rv_continuous
import numpy
class Neg_exp(rv_continuous):
def _cdf(self, x, lamda):
return 1-numpy.exp(-lamda*x)
neg_exp = Neg_exp(name="Negative exponential", a=0)
print (neg_exp.pdf(0,.5))
print (neg_exp.pdf(5,.5))
print (neg_exp.cdf(5,.5))
print (neg_exp.stats(0.5))
print (neg_exp.rvs(0.5))
Sie müssen entweder _pdf oder _cdf definieren, da scipy die Parameter der anderen Funktion (die Sie nicht definieren) und die Reihenfolge dieser Parameter in den von Ihnen definierten Funktionsaufrufen anhand Ihrer Definition ermittelt. In diesem Fall gibt es nur einen Verteilungsparameter, Lambda. Die Variable, die den Zufallsvariablenwert darstellt, erscheint zuerst in der Definition von _pdf oder _cdf.
Wenn Sie nur eine dieser Funktionen definieren, berechnet scipy die andere numerisch. Definieren Sie beides, um eine größere Effizienz zu erzielen. Definieren Sie auf ähnliche Weise _stats anhand bekannter Parameter, um die beste Effizienz zu erzielen. ansonsten verwendet scipy numerische methoden.
Beachten Sie, dass die Unterstützung der Distribution definiert wird, wenn die Klasse instanziiert wird (die Variable a ist auf null und b standardmäßig auf unendlich gesetzt), und nicht wenn sie einer Unterklasse entspricht. Beachten Sie auch, dass die Parameter der Verteilung nur festgelegt werden, wenn eine der Klasseninstanzen aufgerufen wird, wie in den letzten fünf Codezeilen.