Python scipy - 指定自定义离散分发

时间:2017-01-15 18:11:35

标签: python pandas numpy scipy statistics

我使用scipy.stats的各种连续分布(例如norm)。因此,如果我想找到P(Z <0.5),我会这样做:

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;别的0

然后我可以构造2个向量x = [1,2,3],p = [1 / 3,1 / 3,1 / 3]并将它们输入到一个库类中,然后提供.cdf()等?

1 个答案:

答案 0 :(得分:4)

我猜你在这里寻找scipy.stats.rv_discrete。来自docs

  

rv_discrete是构建特定分发类的基类   和离散随机变量的实例。它也可以用来   构造由支持列表定义的任意分布   点和相应的概率。

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

你的例子:

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