将其他参数加载到 scipy 的rv_continuous



我计划在连续的、非分析的随机变量上做一些基本代数。我想把它们的概率密度函数定义为数组x和f(x(。

然而,我惊讶地发现,似乎没有任何包可以进行基本操作,比如计算两个pdf的和或乘积分布(如果我错了,请纠正我(。为了自己实现这些操作,我计划创建scipy.statsrv_continous的子类,如下所示:

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_continous,或者用其他方法来解决问题?

这似乎对我有用:

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)

最新更新