scipy
rv_continuous для распределения с параметрами
Поиск…
Отрицательный бином на положительных значениях
from scipy.stats import rv_continuous
import numpy
class Neg_exp(rv_continuous):
def _cdf(self, x, lamda):
return 1-numpy.exp(-lamda*x)
neg_exp = Neg_exp(name="Negative exponential", a=0)
print (neg_exp.pdf(0,.5))
print (neg_exp.pdf(5,.5))
print (neg_exp.cdf(5,.5))
print (neg_exp.stats(0.5))
print (neg_exp.rvs(0.5))
Очень важно определить _pdf или _cdf, поскольку scipy определяет параметры другой функции (которую вы не определяете) и порядок этих параметров в любых вызовах функций, которые вы делаете, из вашего определения. В этом случае имеется только один параметр распределения лямбда. Переменная, представляющая значение случайной переменной, появляется сначала в определении _pdf или _cdf.
Когда вы определяете только одну из этих функций, scipy будет вычислять другую численно. Для достижения большей эффективности определите оба. Аналогично, определите _stats с точки зрения известных параметров для лучшей эффективности; в противном случае scipy использует численные методы.
Обратите внимание, что поддержка дистрибутива определяется при создании экземпляра класса (переменная a устанавливается равной нулю, а b по умолчанию установлена в бесконечность), а не тогда, когда она подклассифицирована. Также обратите внимание, что параметры дистрибутива задаются только при вызове одного из экземпляров класса, как в последних пяти строках кода.