问题描述
我创建了一个代表统计模拟的类。其中一个方面是 p 值的分布,该类包含表征该分布的方法:
class Simulation:
...
def pdf_p(self,p):
...
def cdf_p(self,p):
...
def ppf_p(self,P):
...
def rvs_p(self,size):
...
我现在想将该分发也公开为 scipy.stats
样式的分发对象。为此,我的类的 __init__
方法包含一条语句
self.p = PValuedist(self.pdf_p,self.cdf_p,self.ppf_p,self.rvs_p)
from scipy.stats import rv_continuous
class PValuedist (rv_continuous):
def __init__(self,pdf,cdf,ppf,rvs):
self._pdf = pdf
self._cdf = cdf
self._ppf = ppf
self._rvs = rvs
super().__init__(self)
这似乎有效,但我想知道这是正确还是规范方法?
当然我也可以让 Simulation
成为 rv_continuous
的子类并重命名我的方法。然而,模拟包含几个不同的分布,用其中之一来识别模拟在语义上似乎不正确。
解决方法
看起来还可以。需要注意的几件事:1) scipy.stats 分布是实例,所以不要忘记创建一个,2) 如果支持不是默认的 ((0,inf) IIRC),在 __init__ 中设置它们。>