从另一个 class 的方法动态创建 scipy.stats 分布
Dynamically create scipy.stats distribution from methods of another class
我创建了一个代表统计模拟的 class。其中一个方面是 p 值的分布,class 包含表征该分布的方法:
class Simulation:
...
def pdf_p(self, p):
...
def cdf_p(self, p):
...
def ppf_p(self, P):
...
def rvs_p(self, size):
...
我现在想将该分布也公开为 scipy.stats
样式的分布对象。为此,我的 class 的 __init__
方法包含一个语句
self.p = PValueDist(self.pdf_p, self.cdf_p, self.ppf_p, self.rvs_p)
其中 class PValueDist
定义为
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
的子 class 并重命名我的方法。但是,该模拟包含多个不同的分布,用其中之一来识别模拟在语义上似乎不正确。
看起来不错。需要注意的几件事:1) scipy.stats 分布是实例,所以不要忘记创建一个,2) 如果支持不是默认的 ((0, inf) IIRC),将它们设置在 the__init__.
我创建了一个代表统计模拟的 class。其中一个方面是 p 值的分布,class 包含表征该分布的方法:
class Simulation:
...
def pdf_p(self, p):
...
def cdf_p(self, p):
...
def ppf_p(self, P):
...
def rvs_p(self, size):
...
我现在想将该分布也公开为 scipy.stats
样式的分布对象。为此,我的 class 的 __init__
方法包含一个语句
self.p = PValueDist(self.pdf_p, self.cdf_p, self.ppf_p, self.rvs_p)
其中 class PValueDist
定义为
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
的子 class 并重命名我的方法。但是,该模拟包含多个不同的分布,用其中之一来识别模拟在语义上似乎不正确。
看起来不错。需要注意的几件事:1) scipy.stats 分布是实例,所以不要忘记创建一个,2) 如果支持不是默认的 ((0, inf) IIRC),将它们设置在 the__init__.