微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从另一个类的方法动态创建 scipy.stats 分布

如何解决从另一个类的方法动态创建 scipy.stats 分布

我创建了一个代表统计模拟的类。其中一个方面是 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 的子类并重命名我的方法。然而,模拟包含几个不同的分布,用其中之一来识别模拟在语义上似乎不正确。

解决方法

看起来还可以。需要注意的几件事:1) scipy.stats 分布是实例,所以不要忘记创建一个,2) 如果支持不是默认的 ((0,inf) IIRC),在 __init__ 中设置它们。>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。