【发布时间】:2021-09-30 20:10:30
【问题描述】:
我想为 scipy.stats.rv_continuous 中的所有分布添加一个方法。该方法将返回累积计数,即额外参数 nu(总计数)与现有 cdf 函数的乘积。我尝试将新方法添加到rv_continuous 类中,如下所示:
from scipy.stats import rv_continuous, uniform, gamma
def cntsCumul(self, x, nu): return nu * self.cdf(x)
rv_continuous.cntsCumul = cntsCumul
x = [-0.76, 1.2, 5.67]
for xx in x: print(uniform.cdf(xx)) # OK
for xx in x: print(uniform.cntsCumul(xx, 3)) # Not OK
rv1 = uniform()
for xx in x: print(rv1.cdf(xx)) # OK
for xx in x: print(rv1.cntsCumul(xx, 3)) # Not OK
a = 2
for xx in x: print(gamma.cdf(xx, a)) # OK
for xx in x: print(gamma.cntsCumul(xx, a, 3)) # OK
rv2 = gamma(a)
for xx in x: print(rv2.cdf(xx)) # OK
for xx in x: print(rv2.cntsCumul(xx, 3)) # Not OK
但得到以下错误:
---> 14 for xx in x: print(rv1.cntsCumul(xx, 3)) # Not OK
15
16 a = 2
AttributeError: 'rv_frozen' object has no attribute 'cntsCumul'
不知道如何处理rv_frozen。有什么建议?另外,不确定参数是否会导致问题。
【问题讨论】:
-
只是 rv_continous 的子类,不要对其进行修补
-
@ev-br 如果我将 rv_continuous 子类化,更改将如何传播到从 rv_continuous 继承的所有发行版?
-
坦率地说,你在这里做了一些非常奇怪的事情,试图修补所有 scipy.stats 发行版,包括各种子类。在原始帖子中错过了这一点 --- 我根本无法想象一个合法的用例
-
我正在对各种分布进行似然拟合 - 我事先不知道正确的分布,并且该模型需要多个分布的组合。该方法需要累积计数。使用这种方法,事情会简单得多。此外,使用显示计数密度的方法绘制结果会简单得多。不确定python中的“奇怪”是什么意思:)
标签: python scipy scipy.stats