我尝试扩展scipy.stats.rv_discrete为用户提供一些简单的分布。例如,在最简单的情况下,他们可能需要一个具有常量输出的分布。下面是我的代码:
from scipy.stats._distn_infrastructure import rv_sample
class const(rv_sample): # a distribution with probability 1 for a single val
def __init__(self, val, *args, **kwds):
super(const, self).__init__(values=(val, 1), *args, **kwds)
然而,这并不会产生与内置随机变量分布类型相同的对象,而且这会打乱我想对分布执行的一些一般性操作。将其与泊松分布进行比较:
from scipy.stats import poisson
import inspect
print('\nThese should both contain rv_discrete:')
print('1: ', inspect.getmro(poisson.__class__))
print('2: ', inspect.getmro(const.__class__))
print('\nThese should both be rv_frozen:')
print('1: ', inspect.getmro(poisson(5).__class__))
print('2: ', inspect.getmro(const(5).__class__))
输出量:
These should both contain rv_discrete:
1: (<class 'scipy.stats._discrete_distns.poisson_gen'>, <class 'scipy.stats._distn_infrastructure.rv_discrete'>, <class 'scipy.stats._distn_infrastructure.rv_generic'>, <class 'object'>)
2: (<class 'type'>, <class 'object'>)
These should both be rv_frozen:
1: (<class 'scipy.stats._distn_infrastructure.rv_frozen'>, <class 'object'>)
2: (<class '__main__.const'>, <class 'scipy.stats._distn_infrastructure.rv_sample'>, <class 'scipy.stats._distn_infrastructure.rv_discrete'>, <class 'scipy.stats._distn_infrastructure.rv_generic'>, <class 'object'>)
这里有什么提示吗?我在子类化方面相对缺乏经验,所以它可能很简单。谢谢!
1条答案
按热度按时间gudnpqoy1#
这个问题目前还不能解决,但它是scipy发行版大修的一部分,在这里进行了跟踪:https://github.com/scipy/scipy/issues/15928