rv_discrete#
- класс scipy.stats.rv_discrete(a=0, b=inf, имя=None, badvalue=None, moment_tol=1e-08, values=None, inc=1, длинное имя=None, формы=None, seed=None)[источник]#
Универсальный класс дискретной случайной величины, предназначенный для наследования.
rv_discreteявляется базовым классом для создания конкретных классов распределений и экземпляров для дискретных случайных величин. Также может использоваться для создания произвольного распределения, заданного списком точек поддержки и соответствующих вероятностей.- Параметры:
- afloat, опционально
Нижняя граница носителя распределения, по умолчанию: 0
- bfloat, опционально
Верхняя граница поддержки распределения, по умолчанию: плюс бесконечность
- moment_tolfloat, опционально
Допуск для общего расчета моментов.
- valuesкортеж из двух array_like, опционально
(xk, pk)гдеxkявляются целыми числами иpk— это ненулевые вероятности между 0 и 1 сsum(pk) = 1.xkиpkдолжны иметь одинаковую форму, иxkдолжны быть уникальными.- incцелое число, опционально
Приращение для поддержки распределения. По умолчанию равно 1. (другие значения не тестировались)
- badvaluefloat, опционально
Значение в результирующих массивах, которое указывает на значение, для которого нарушено некоторое ограничение аргумента, по умолчанию np.nan.
- имяstr, optional
Имя экземпляра. Эта строка используется для создания стандартного примера для распределений.
- длинное имяstr, optional
Эта строка используется как часть первой строки документации, возвращаемой когда подкласс не имеет собственной документации. Примечание: длинное имя существует для обратной совместимости, не используйте для новых подклассов.
- формыstr, optional
Форма распределения. Например, "m, n" для распределения, которое принимает два целых числа в качестве двух аргументов формы для всех своих методов. Если не указано, параметры формы будут выведены из сигнатур приватных методов.
_pmfи_cdfэкземпляра.- seed{None, int,
numpy.random.Generator,numpy.random.RandomState, опционально Если seed равно None (или np.random),
numpy.random.RandomStateиспользуется синглтон. Если seed является int, новыйRandomStateиспользуется экземпляр, инициализированный с seed. Если seed уже являетсяGeneratorилиRandomStateэкземпляр, тогда этот экземпляр используется.
- Атрибуты:
- a, bfloat, опционально
Нижняя/верхняя граница поддержки несдвинутого/немасштабированного распределения. Это значение не затрагивается loc и scale параметры. Чтобы вычислить носитель сдвинутого/масштабированного распределения, используйте
supportметод.
Методы
rvs(*args, **kwargs)Случайные величины заданного типа.
pmf(k, *args, **kwds)Функция вероятности в точке k для заданной случайной величины.
logpmf(k, *args, **kwds)Логарифм функции вероятности в точке k для данного случайного вектора.
cdf(k, *args, **kwds)Функция кумулятивного распределения заданной случайной величины.
logcdf(k, *args, **kwds)Логарифм функции распределения в точке k для данного СВ.
sf(k, *args, **kwds)Функция выживания (1 -
cdf) в точке k для данного RV.logsf(k, *args, **kwds)Логарифм функции выживания данного случайного вектора.
ppf(q, *args, **kwds)Процентная точка функции (обратная
cdf) при q заданного случайного распределения.isf(q, *args, **kwds)Обратная функция выживания (обратная к
sf) при q заданного случайного распределения.moment(order, *args, **kwds)нецентральный момент распределения указанного порядка.
stats(*args, **kwds)Некоторые статистики заданного случайного вектора.
entropy(*args, **kwds)Дифференциальная энтропия случайной величины.
expect([func, args, loc, lb, ub, ...])Вычислить математическое ожидание функции относительно распределения для дискретного распределения путем численного суммирования.
median(*args, **kwds)Медиана распределения.
mean(*args, **kwds)Среднее распределения.
std(*args, **kwds)Стандартное отклонение распределения.
var(*args, **kwds)Дисперсия распределения.
interval(confidence, *args, **kwds)Доверительный интервал с равными площадями вокруг медианы.
__call__(*args, **kwds)Зафиксировать распределение для заданных аргументов.
support(*args, **kwargs)Носитель распределения.
Примечания
Этот класс похож на
rv_continuous. Является ли параметр формы допустимым, определяется_argcheckметод (который по умолчанию проверяет, что его аргументы строго положительны.) Основные различия следующие.Носитель распределения является множеством целых чисел.
Вместо функции плотности вероятности,
pdf(и соответствующий приватный_pdf), этот класс определяет функция вероятности массы,pmf(и соответствующий приватный_pmf.)Нет
scaleпараметр.Реализации методов по умолчанию (например,
_cdf) не предназначены для распределений с носителем, неограниченным снизу (т.е.a=-np.inf), поэтому они должны быть переопределены.
Чтобы создать новое дискретное распределение, мы сделаем следующее:
>>> from scipy.stats import rv_discrete >>> class poisson_gen(rv_discrete): ... "Poisson distribution" ... def _pmf(self, k, mu): ... return exp(-mu) * mu**k / factorial(k)
и создать экземпляр:
>>> poisson = poisson_gen(name="poisson")
Обратите внимание, что выше мы определили распределение Пуассона в стандартной форме. Сдвиг распределения можно выполнить, предоставив
locпараметр методам экземпляра. Например,poisson.pmf(x, mu, loc)делегирует работуpoisson._pmf(x-loc, mu).Дискретные распределения из списка вероятностей
Альтернативно, вы можете построить произвольную дискретную случайную величину, определённую на конечном наборе значений
xkсProb{X=xk} = pkиспользуяvaluesключевой аргумент дляrv_discreteконструктор.Глубокое копирование / Сериализация
Если распределение или замороженное распределение глубоко копируется (пиклируется/распиклируется, и т.д.), любой базовый генератор случайных чисел копируется вместе с ним. Следствием является то, что если распределение полагается на синглтон RandomState перед копированием, оно будет полагаться на копию этого случайного состояния после копирования, и
np.random.seedбольше не будет управлять состоянием.Примеры
Пользовательское дискретное распределение:
>>> import numpy as np >>> from scipy import stats >>> xk = np.arange(7) >>> pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.2) >>> custm = stats.rv_discrete(name='custm', values=(xk, pk)) >>> >>> import matplotlib.pyplot as plt >>> fig, ax = plt.subplots(1, 1) >>> ax.plot(xk, custm.pmf(xk), 'ro', ms=12, mec='r') >>> ax.vlines(xk, 0, custm.pmf(xk), colors='r', lw=4) >>> plt.show()
Генерация случайных чисел:
>>> R = custm.rvs(size=100)