scipy
rv_continuous dla dystrybucji z parametrami
Szukaj…
Ujemny dwumian na pozytywnych realiach
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))
Konieczne jest zdefiniowanie _pdf lub _cdf, ponieważ scipy ustala parametry innej funkcji (której nie definiujesz) oraz kolejność tych parametrów we wszystkich wywołaniach funkcji, które wykonujesz, z twojej definicji. W tym przypadku jest tylko jeden parametr dystrybucji, lambda. Zmienna reprezentująca wartość zmiennej losowej pojawia się najpierw w definicji _pdf lub _cdf.
Kiedy zdefiniujesz tylko jedną z tych funkcji, scipy obliczy drugą numerycznie. Dla możliwej większej wydajności zdefiniuj oba. Podobnie, zdefiniuj _stats w kategoriach znanych parametrów dla najlepszej wydajności; w przeciwnym razie scipy używa metod numerycznych.
Zauważ, że wsparcie dla dystrybucji jest definiowane, gdy tworzona jest instancja klasy (zmienna a jest ustawiona na zero, a b jest ustawiona domyślnie na nieskończoność), a nie kiedy jest podklasą. Zauważ też, że parametry dystrybucji są ustawiane tylko wtedy, gdy wywoływana jest jedna z instancji klasy, jak w ostatnich pięciu wierszach kodu.