У меня есть следующий подкласс scipy.stats.rv_continuous
:
from scipy.stats import rv_continuous
import math
class Distribution(rv_continuous):
def _cdf(self, x, a, b, mu):
return (
math.erf(x/(math.sqrt(2)*a)) + \
math.erf((x - mu)/(math.sqrt(2)*b)) \
) / 2 + math.erf(mu/(math.sqrt(2)*b)) / 2
distribution = Distribution(a = 0, b = float('inf'))
Насколько я могу судить, все настроено правильно (я проверил математику, и это также правильно). Однако по какой-то причине он хочет генерировать значения только от 0
до mu
, а не от ожидаемых 0
и inf
, как указано явно . Например, вот 50 точек, сгенерированных с помощью distribution.rvs(3, 1.6, 10)
(вместе с PDF):
и вот пример с distribution.rvs(0.6, 0.4, 4.85)
:
Почему мой дистрибутив ограничен mu
? Я неправильно установил свой rv_continuous
подкласс?