Rv_continuous подкласса Сципи с функцией Кастона - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать подкласс 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.))

Может кто-нибудь мне помочь?Большое спасибо

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Моя проблема была довольно простой: как указано в документации

Если положительная проверка аргументов неверна для вашего RV, вам также потребуется переопределить метод _argcheck.

Переопределив функцию _argcheck, я заставил ее работать.

def _argcheck(self, *args):
    """Default check for correct values on args and keywords.
    Returns condition array of 1's where arguments are correct and
     0's where they are not.
    """
    cond = 1
    for arg in args:
        cond = np.logical_and(cond, (np.asarray(arg) > -np.inf))
    return cond
0 голосов
/ 15 ноября 2018

@ andrea dist.pdf имеет следующие аргументы.Пожалуйста, проверьте строки документа для получения дополнительной информации.

Signature: dist.pdf(x, *args, **kwds)
Docstring:
Probability density function at x of the given RV.

Parameters
----------
x : array_like
    quantiles
arg1, arg2, arg3,... : array_like
    The shape parameter(s) for the distribution (see docstring of the
    instance object for more information)
loc : array_like, optional
    location parameter (default=0)
scale : array_like, optional
    scale parameter (default=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...