Я создал класс, который представляет собой статистическое моделирование. Одним из аспектов этого является распределение 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)
где класс 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
и переименовать свои методы. Однако симуляция включает в себя несколько разных распределений, и отождествление симуляции с одним из них не кажется семантически правильным.
[a, b]
, где, скажем,pdf(x)
принимаетx\in [a, b]
. Если это[0, 1]
, то вы хотитеsuper().__init__(self, a=0, b=1)
и определите_argcheck
19.01.2021_argcheck
не применяется. 21.01.2021a=0, b=1
. 21.01.2021rv_frozen
? 21.01.2021