Создание подкласса случайных величин scipy.stats не приводит к ожидаемому типу объекта - PullRequest
2 голосов
/ 02 апреля 2020

Я пытаюсь расширить 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'>)

Любые советы о том, что я делаю здесь неправильно? Я относительно неопытен, когда дело доходит до подклассов, так что это может быть что-то простое. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...