scipy.stats.

truncate#

scipy.stats.truncate(X, lb=-inf, ub=inf)[Quelle]#

Beschneidet die Unterstützung einer Zufallsvariable.

Gegeben eine Zufallsvariable X, gibt truncate eine Zufallsvariable mit einer auf das Intervall zwischen lb und ub beschnittenen Unterstützung zurück. Die zugrundeliegende Wahrscheinlichkeitsdichtefunktion wird entsprechend normiert.

Parameter:
XContinuousDistribution

Die zu beschneidende Zufallsvariable.

lb, ubfloat array-like

Die untere bzw. obere Beschneidungspunkt. Müssen miteinander und mit der Form von X broadcastbar sein.

Rückgabe:
XContinuousDistribution

Die beschnittene Zufallsvariable.

Referenzen

[1]

„Truncated Distribution“. Wikipedia. https://en.wikipedia.org/wiki/Truncated_distribution

Beispiele

Vergleichen Sie dies mit scipy.stats.truncnorm, das eine Standardnormalverteilung beschneidet, *dann* verschiebt und skaliert.

>>> 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

Angenommen, wir möchten eine normale Zufallsvariable verschieben und skalieren und dann ihre Unterstützung auf gegebene Werte beschneiden. Dies ist mit truncate einfach.

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

Darüber hinaus kann truncate auf jede Zufallsvariable angewendet werden

>>> 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