【发布时间】:2021-02-13 08:44:30
【问题描述】:
我打算对连续的、非解析的随机变量做一些基本的代数。我想将它们的概率密度函数定义为数组 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,或者解决问题的其他方法?
【问题讨论】:
-
两个 cmets:(1) 您将希望在覆盖的
__init__中调用超级构造函数,如下所示:super().__init__()。 (2) 您的示例可能并不完美,因为从统计的角度来看,支持的积分必须总和为 1 才能成为有效分布:-) -
(1) 你能详细说明一下吗?据我了解
super(),它会调用超类的__init__方法,在这种情况下为rv_continuous。但是,我的问题是rv_continuous没有采用我需要传递的附加参数。 (2) 如果我将3*x**2从 0 整合到 1,我得到 1 :) -
我发布了一个我认为可能有用的 sn-p。抱歉,我搞砸了 (2) :-)
标签: python scipy statistics probability probability-density