我想对scipy.stats.norm进行子类化,这样我就可以拥有具有附加功能的冻结分布实例(即具有特定均值/方差的实例)。
但是,我无法超越构建实例的第一步。

编辑:这是一个互动会议的笔录,演示了我的问题(没有袖手旁观)

In [1]: import scipy.stats

In [2]: class A(scipy.stats.norm):
   ...:     def __init__(self):
   ...:         super( A, self).__init__()
   ...:
   ...:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/Dave/src/python2.7/density_estimation/<ipython console> in <module>()

/usr/lib64/python2.7/site-packages/scipy/stats/distributions.pyc in __init__(self, momtype, a, b, xa, xb, xtol, badvalue, name, longname, shapes, extradoc)
    958
    959         if longname is None:
--> 960             if name[0] in ['aeiouAEIOU']:
    961                 hstr = "An "
    962             else:

TypeError: Error when calling the metaclass bases
    'NoneType' object is not subscriptable


我可以看到scipy.stats做某种奇怪的事情,其中​​norm是某事物的特定实例(某种类型?),但这不是普通的类定义,因此我看不到如何为其调用构造函数。

编辑#2:scipy版本可能相关。

In [19]: scipy.__version__
Out[19]: '0.9.0'

最佳答案

scipy.stats.norm不是类。它是scipy.stats.norm_gen的实例。调用norm(*args, **kwds)将返回带有rv_frozennorm实例以及您提供的参数。如果要使用一种新的冻结分发,请在rv_frozen子类中添加您的方法,并使用norm和参数对其进行实例化。不必担心将norm_gen子类化。

关于python - 如何子类scipy.stats.norm?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17975293/

10-12 19:29