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

s5s*_*s5s 5 python statistics numpy scipy pandas

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

from scipy.stats import norm
norm(0, 1).cdf(0.5)  # Z~N(0,1)
Run Code Online (Sandbox Code Playgroud)

是否有工具(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()等?

And*_*lev 4

我猜你正在寻找scipy.stats.rv_discrete这里。来自文档

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))
Run Code Online (Sandbox Code Playgroud)

还有你的例子:

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
Run Code Online (Sandbox Code Playgroud)