#python #scipy #time-complexity
#питон #scipy #временная сложность
Вопрос:
В настоящее время я делаю выборку из пользовательского дискретного распределения следующим образом:
discrete_dist = stats.rv_discrete(name='discrete_dist', values=(np.arrange(1,N), p))
samples = discrete_dist.rvs(size = m)
где p — список вероятностей длины N.
Я не могу понять, когда просматриваю документацию, какова вычислительная сложность, поскольку единственное, что говорится в документации о функции rvs(), это следующее:
def rvs(self, *args, **kwargs):
kwargs['discrete'] = True
return super().rvs(*args, **kwargs)
Ссылка на документацию здесь. Как работает эта функция?
Бонусный вопрос: Есть ли более быстрый способ сделать это?
Ответ №1:
Код для дискретных распределений с явным values
выражением находится здесь: https://github.com/scipy/scipy/blob/v1.7.1/scipy/stats/_distn_infrastructure.py#L3710
По сути, это выборка обратной функции распределения, которая преобразует равномерную переменную в (0, 1), используя обратную к cdf.