Поддержка Numba для оценки функций плотности вероятности? - PullRequest
0 голосов
/ 20 февраля 2019

Numba поддерживает случайную выборку нескольких распределений в numpy .Однако, когда мы хотим оценить PDF дистрибутива, используя scipy, numba, похоже, не поддерживает это:

from numba import njit
from scipy import stats
import numpy as np

@njit
def quick_pdf(n):
    """
    Return the pdf of a standard normal evaluated at multiple different values

    :type n: int
    :param n: number of iterations / values to evaluate PDF at

    :rtype: numpy.ndarray
    """
    out = np.empty(n)
    for i in range(n):
        out[i] = stats.norm().pdf(np.sqrt(i))
    return out

quick_pdf(1000)
>>> TypingError
...
    out[i] = stats.norm().pdf(np.sqrt(i))
    ^
This is not usually a problem with Numba itself but instead often caused by
the use of unsupported features or an issue in resolving types.

Есть ли какой-то способ обойти это, кроме ручного определения PDF самостоятельно?Иногда PDF дистрибутива, который я хочу оценить, довольно сложный, например, t-дистрибутив или бета-дистрибутив, поэтому было бы утомительно кодировать их самому с нуля (особенно если они многовариантные).

РЕДАКТИРОВАТЬ: Я знаю, что я мог бы оценить PDF без использования цикла for, используя чистый numpy:

x = np.linspace(-2,2,10000) # 10000 evaluation points
pdf_eval = stats.norm().pdf(x)

Функция quick_pdf, которую я привел выше, является лишь простой иллюстрацией.Для моего фактического варианта использования необходим цикл for, поскольку существуют операторы if и другие вопросы, зависящие от итерации.

...