有没有办法,使用一些已建立的 Python 包(例如 SciPy)来定义我自己的概率密度函数(没有任何先验数据,只是),所以我可以用它进行计算(例如获得连续随机变量的方差)?当然,我可以使用 SymPy 或 Sage,创建一个符号函数并执行操作,但我想知道是否可以使用已经实现的包来代替自己完成所有这些工作。
在 Python 中定义自定义概率密度函数
计算科学
Python
统计数据
可能性
2021-12-01 20:16:11
2个回答
您必须在scipy.stats 中继承rv_continuous类
import scipy.stats as st
class my_pdf(st.rv_continuous):
def _pdf(self,x):
return 3*x**2 # Normalized over its range, in this case [0,1]
my_cv = my_pdf(a=0, b=1, name='my_pdf')
现在 my_cv 是具有给定 PDF 和范围 [0,1] 的连续随机变量
请注意,在此示例中my_pdf
,andmy_cv
是任意名称(可以是任何名称),但不是_pdf
任意名称;它和是其中一个方法必须被覆盖才能使子类化工作。_cdf
st.rv_continuous
您应该查看 sympy.stats。它提供了一个处理随机变量的接口。下面的例子提供了一个X
定义在单位区间上的随机变量,密度为2x
In [1]: from sympy.stats import *
In [2]: x = Symbol('x')
In [3]: X = ContinuousRV(x, 2*x, Interval(0, 1))
In [4]: P(X>.5)
Out[4]: 0.750000000000000
In [5]: Var(X) # variance
Out[5]: 1/18
In [6]: E(2*cos(X)+X**2) # complex expressions are ok too
Out[6]: -7/2 + 4⋅cos(1) + 4⋅sin(1)
如果你有兴趣,这个抽象可以处理一些相当复杂的操作。
其它你可能感兴趣的问题