Я пытаюсь создать подкласс rv_continuous со специальным распределением.У меня есть выражение для PDF, и я хочу извлечь из него случайные числа.Тем не менее, я даже не могу получить сюжет PDF.Код, который я публикую, показывает, что я получаю NaN, когда я звоню dist.pdf
, тогда как вызов dist._pdf
дает мне правильный ответ (в установленных мною границах).
Вот простой пример,Функции печати должны возвращать тот же вывод, в то время как последняя выдает только NaN.Я совершенно уверен, что неправильно передаю некоторые параметры dist.pdf
, но я не специалист по scipy.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division, print_function
import numpy as np
# the actual function used to compute the pdf
def _schechter(M, alpha, phi, Mo):
f = phi * 10.0**(0.4 * (alpha + 1) * (Mo - M))
out = 0.4 * np.log(10.0) * np.exp(-10.0**(0.4 * (Mo - M))) * f
return out
from scipy import stats
class sch(stats.rv_continuous):
def _pdf(self, x, alpha, phi, Mo):
return _schechter(x, alpha, phi, Mo)
# to normalize the distribution, it has to be limited on the right, b cannot be
# np.inf
dist = sch(name='schecter', b=0.)
x_real = np.linspace(-100, -1, 100)
print(_schechter(x_real , -1.4, 1., -21))
print(dist._pdf(x_real, alpha=-1.4, phi=1., Mo=-21))
print(dist.pdf(x_real, -1.4, 1., -21.))
Может кто-нибудь мне помочь?Большое спасибо