scipy.stats.

усечение#

scipy.stats.усечение(X, lb=-inf, ub=inf)[источник]#

Усечь носитель случайной величины.

Для случайной величины X, truncate возвращает случайную величину с поддержкой, усеченной до интервала между lb и ub. Базовая функция плотности вероятности нормализована соответствующим образом.

Параметры:
XContinuousDistribution

Случайная величина, которая должна быть усечена.

lb, ubмассивоподобный объект с типом float

Нижняя и верхняя точки усечения соответственно. Должны быть совместимы по форме друг с другом и с формой X.

Возвращает:
XContinuousDistribution

Усечённая случайная величина.

Ссылки

[1]

"Усеченное распределение". Википедия. https://en.wikipedia.org/wiki/Truncated_distribution

Примеры

Сравнить с scipy.stats.truncnorm, который усекает стандартное нормальное распределение, затем сдвигает и масштабирует его.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy import stats
>>> loc, scale, lb, ub = 1, 2, -2, 2
>>> X = stats.truncnorm(lb, ub, loc, scale)
>>> Y = scale * stats.truncate(stats.Normal(), lb, ub) + loc
>>> x = np.linspace(-3, 5, 300)
>>> plt.plot(x, X.pdf(x), '-', label='X')
>>> plt.plot(x, Y.pdf(x), '--', label='Y')
>>> plt.xlabel('x')
>>> plt.ylabel('PDF')
>>> plt.title('Truncated, then Shifted/Scaled Normal')
>>> plt.legend()
>>> plt.show()
../../_images/scipy-stats-truncate-1_00_00.png

Однако предположим, что мы хотим сдвинуть и масштабировать нормальную случайную величину, затем усечь ее носитель до заданных значений. Это просто сделать с помощью truncate.

>>> Z = stats.truncate(scale * stats.Normal() + loc, lb, ub)
>>> Z.plot()
>>> plt.show()
../../_images/scipy-stats-truncate-1_01_00.png

Кроме того, truncate может быть применена к любой случайной величине:

>>> Rayleigh = stats.make_distribution(stats.rayleigh)
>>> W = stats.truncate(Rayleigh(), lb=0.5, ub=3)
>>> W.plot()
>>> plt.show()
../../_images/scipy-stats-truncate-1_02_00.png