2017-01-15 58 views
5

Używam różnych ciągłych dystrybucji z scipy.stats (np. Norm). Więc jeśli chcę znaleźć P (z < 0,5) Chciałbym zrobić:Python scipy - określ niestandardową dystrybucję dyskretną

from scipy.stats import norm 
norm(0, 1).cdf(0.5) # Z~N(0,1) 

Czy istnieje narzędzie (scipy.stats lub statsmodels lub inny), które można użyć do opisania dyskretnego rozkładu, a następnie obliczyć CDF/CMF itp. Na tym? Mogę sam napisać kod, ale zastanawiałem się, czy coś istnieje, na przykład:

pdf (x) = 1/3 dla x = 1,2,3; jeszcze 0

Następnie mogę zbudować 2 wektory x = [1,2,3], p = [1/3, 1/3, 1/3] i wprowadzić je do klasy biblioteki, która następnie zapewni .cdf() itp?

Odpowiedz

4

Zgaduję, że szukasz tutaj scipy.stats.rv_discrete. Z docs:

rv_discrete jest klasa podstawa do konstruowania specyficzne klasy dystrybucji i instancji dyskretnych zmiennych losowych. Można go również użyć do utworzenia rozkładu arbitralnego zdefiniowanego przez listę punktów wsparcia i odpowiadających im prawdopodobieństw.

Przykład z docs:

from scipy import stats 
xk = np.arange(7) 
pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.2) 
custm = stats.rv_discrete(name='custm', values=(xk, pk)) 

A Twój przykład:

In [1]: import numpy as np 

In [2]: from scipy import stats 

In [3]: custm = stats.rv_discrete(name='custm', values=((1, 2, 3), (1./3, 1./3, 1./3))) 

In [4]: custm.cdf(2.5) 
Out[4]: 0.66666666666666663