scipy.special.gdtr#

scipy.special.gdtr(a, b, x, выход=None) = 'gdtr'>#

Функция распределения гамма-распределения.

Возвращает интеграл от нуля до x гамма-функции плотности вероятности,

\[F = \int_0^x \frac{a^b}{\Gamma(b)} t^{b-1} e^{-at}\,dt,\]

где \(\Gamma\) является гамма-функцией.

Параметры:
aarray_like

Параметр скорости гамма-распределения, иногда обозначаемый \(\beta\) (float). Это также обратная величина параметра масштаба \(\theta\).

barray_like

Параметр формы гамма-распределения, иногда обозначаемый \(\alpha\) (float).

xarray_like

Квантиль (верхний предел интегрирования; число с плавающей точкой).

выходndarray, необязательно

Необязательный выходной массив для значений функции

Возвращает:
Fскаляр или ndarray

CDF гамма-распределения с параметрами a и b вычислено в x.

Смотрите также

gdtrc

1 - CDF гамма-распределения.

scipy.stats.gamma

Гамма-распределение

Примечания

Вычисление выполняется с использованием связи с интегралом неполной гамма- функции (регуляризованной гамма-функции).

Обертка для Cephes [1] рутина gdtr. Вызов gdtr напрямую может улучшить производительность по сравнению с cdf метод scipy.stats.gamma (см. последний пример ниже).

Ссылки

[1]

Библиотека математических функций Cephes, http://www.netlib.org/cephes/

Примеры

Вычислить функцию для a=1, b=2 в x=5.

>>> import numpy as np
>>> from scipy.special import gdtr
>>> import matplotlib.pyplot as plt
>>> gdtr(1., 2., 5.)
0.9595723180054873

Вычислить функцию для a=1 и b=2 в нескольких точках путем предоставления массива NumPy для x.

>>> xvalues = np.array([1., 2., 3., 4])
>>> gdtr(1., 1., xvalues)
array([0.63212056, 0.86466472, 0.95021293, 0.98168436])

gdtr может оценивать различные наборы параметров, предоставляя массивы с совместимыми для трансляции формами для a, b и x. Здесь мы вычисляем функцию для трех различных a в четырёх позициях x и b=3, что приводит к массиву 3x4.

>>> a = np.array([[0.5], [1.5], [2.5]])
>>> x = np.array([1., 2., 3., 4])
>>> a.shape, x.shape
((3, 1), (4,))
>>> gdtr(a, 3., x)
array([[0.01438768, 0.0803014 , 0.19115317, 0.32332358],
       [0.19115317, 0.57680992, 0.82642193, 0.9380312 ],
       [0.45618688, 0.87534798, 0.97974328, 0.9972306 ]])

Построить график функции для четырёх различных наборов параметров.

>>> a_parameters = [0.3, 1, 2, 6]
>>> b_parameters = [2, 10, 15, 20]
>>> linestyles = ['solid', 'dashed', 'dotted', 'dashdot']
>>> parameters_list = list(zip(a_parameters, b_parameters, linestyles))
>>> x = np.linspace(0, 30, 1000)
>>> fig, ax = plt.subplots()
>>> for parameter_set in parameters_list:
...     a, b, style = parameter_set
...     gdtr_vals = gdtr(a, b, x)
...     ax.plot(x, gdtr_vals, label=fr"$a= {a},\, b={b}$", ls=style)
>>> ax.legend()
>>> ax.set_xlabel("$x$")
>>> ax.set_title("Gamma distribution cumulative distribution function")
>>> plt.show()
../../_images/scipy-special-gdtr-1_00_00.png

Гамма-распределение также доступно как scipy.stats.gamma. Использование gdtr напрямую может быть намного быстрее, чем вызов cdf метод scipy.stats.gamma, особенно для небольших массивов или отдельных значений. Для получения одинаковых результатов необходимо использовать следующую параметризацию: stats.gamma(b, scale=1/a).cdf(x)=gdtr(a, b, x).

>>> from scipy.stats import gamma
>>> a = 2.
>>> b = 3
>>> x = 1.
>>> gdtr_result = gdtr(a, b, x)  # this will often be faster than below
>>> gamma_dist_result = gamma(b, scale=1/a).cdf(x)
>>> gdtr_result == gamma_dist_result  # test that results are equal
True