scipy.stats.rv_discrete子类的实例会在pmf()方法上抛出错误

时间:2017-10-08 20:36:21

标签: python scipy statistics

我想创建一个scipy.stats.rv_discrete子类来添加一些其他方法。但是,当我尝试访问子类的pmf()方法时,会引发错误。请参阅以下示例:

import numpy as np
from scipy import stats

class sub_rv_discrete(stats.rv_discrete):
  pass

xk = np.arange(2)
pk = (0.5, 0.5)

instance_subclass = sub_rv_discrete(values=(xk, pk))
instance_subclass.pmf(xk)

这导致:

Traceback (most recent call last):

  File "<ipython-input-48-129655c38e6a>", line 11, in <module>
    instance.pmf(xk)

  File "C:\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 2832, in pmf
    args, loc, _ = self._parse_args(*args, **kwds)

AttributeError: 'rv_sample' object has no attribute '_parse_args'

尽管如此,如果我直接使用stats.rv_discrete,一切都很好:

instance_class = stats.rv_discrete(values=(xk, pk))
instance_class.pmf(xk)

---> array([ 0.5,  0.5])

1 个答案:

答案 0 :(得分:1)

@ josef-pkt github上的回答如下:

  

通过常规子类创建一个rv_sample类,并且不会初始化正确的类

     

以下适用于我的0.18.1(我现在已经打开)

from scipy.stats._distn_infrastructure import rv_sample

class subc_rv_discrete(rv_sample):

def __new__(cls, *args, **kwds):
   return super(subc_rv_discrete, cls).__new__(cls)

xk = [0,1,2,3]
pk = [0.1, 0.2, 0.3, 0.4]

inst = subc_rv_discrete(values=(xk, pk))
print(inst.pmf(xk))
print(inst.__class__)

这可能会在scipy个版本中得到修复......