2017-01-15 27 views
5

私はscipy.stats(例えばnorm)からさまざまな連続分布を使用します。私はどうなるP(Z < 0.5)見つけたいのであれば:Python scipy - カスタム離散分布を指定する

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

を私は離散分布を記述するために使用できるツール(scipy.statsまたはstatsmodelsか、他)があり、その後、CDFを計算します/ CMFなど?私は自分でコードを書くことができますが、何かが存在するかどうか疑問に思っていました。例えば:

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

次に、x = [1,2,3]、p = [1/3、1/3、1/3]の2つのベクトルを構築し、それらをライブラリクラスに入力すると、 .cdf()など?

答えて

4

ここにはscipy.stats.rv_discreteがあります。 docsから:

rv_discreteは離散確率変数のための特定の配布クラス とインスタンスを構築するための基本クラスです。 ポイントと対応する確率のリストによって定義された任意の分布を構築するために使用することもできます。ドキュメントから

例:

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)) 

そして、あなたの例:

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 
関連する問題