Answers:
您必须在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
和my_cv
是任意的名字(这可能是任何东西),但_pdf
就是不能随心所欲; 和_cdf
是st.rv_continuous
其中的一种方法,必须重写其中的一种方法才能使子类起作用。
3*x**2
,此处),否则所得的随机变量会产生不正确的结果(my_cv.median()
例如,您可以检查)。我修复了代码。
x
[0,1] 的范围内。你能澄清一下吗?
my_cv.rvs()
(可以接受一个size
参数,一次获得多个样本)。这就是我从文档(docs.scipy.org/doc/scipy/reference/generated/…)中得出的结论。
您应该查看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)
如果您有兴趣,此抽象可以处理一些相当复杂的操作。