在 python 中定义连续的、非分析的 pdf

计算科学 Python 统计数据 可能性
2021-12-19 15:37:21

我打算对连续的、非分析的随机变量做一些基本的代数。我想将它们的概率密度函数定义为数组 x 和 f(x)。

然而,我惊讶地发现似乎没有任何软件包可以执行基本操作,例如计算两个 pdf 的总和或乘积分布(如果我错了,请纠正我)。为了自己实现这些操作,我计划创建一个 scipy.stats rv_continuous 的子类,遵循这个线程:

import scipy as sp
import numpy as np

class my_pdf(sp.stats.rv_continuous):
    def __init__(self,x,p):
        self.x = x
        self.p = p
    
    def _pdf(self,x):
        return sp.interpolate.interp1d(self.x,self.p)(x)

x = np.linspace(0,1,101)
f = 3*x**2
my_cv = my_pdf(x,f)
my_cv.pdf(0)

但是,覆盖init方法可能不是要走的路。除了从头开始构建所有内容之外,有没有办法向 rv_continuous 添加额外的参数,或者解决问题的另一种方法?

1个回答

所以,如果有人再次绊倒这个,它在这里得到了回答:

import scipy as sp
import scipy.stats
import numpy as np

class my_pdf(sp.stats.rv_continuous):
    def __init__(self,x,p):
        super().__init__(a=x.min(), b=x.max())
        self.x = x
        self.p = p

    def _pdf(self,x):
        return sp.interpolate.interp1d(self.x,self.p)(x)

x = np.linspace(0,1,101)
f = 3*x**2
my_cv = my_pdf(x,f)
my_cv.pdf(0)
my_cv.cdf(0.5)

不过,我觉得应该有一个包来对这种随机变量进行操作?