正在向 scipy 的 rv_continuous 加载其他参数
Loading additional parameters to scipy's rv_continuous
我打算在连续的、非分析的随机变量上做一些基本的代数。我想将它们的概率密度函数定义为数组 x 和 f(x)。
然而,我很惊讶地发现似乎没有任何包可以执行基本操作,例如计算两个 pdf 的总和或乘积分布(如果我错了,请纠正我)。为了自己实现这些操作,我打算创建一个 scipy.stats rv_continuous 的子类,跟随 this 线程:
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,或者除了从头开始构建一切之外的其他方法来解决这个问题?
这似乎对我有用:
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)
我打算在连续的、非分析的随机变量上做一些基本的代数。我想将它们的概率密度函数定义为数组 x 和 f(x)。
然而,我很惊讶地发现似乎没有任何包可以执行基本操作,例如计算两个 pdf 的总和或乘积分布(如果我错了,请纠正我)。为了自己实现这些操作,我打算创建一个 scipy.stats rv_continuous 的子类,跟随 this 线程:
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,或者除了从头开始构建一切之外的其他方法来解决这个问题?
这似乎对我有用:
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)