scipy.stats.

circstd#

scipy.stats.circstd(samples, high=6.283185307179586, low=0, axis=None, nan_policy='propagate', *, normalize=False, keepdims=False)[Quelle]#

Berechnet die zirkuläre Standardabweichung einer Stichprobe von Winkelmessungen.

Gegeben \(n\) Winkelmessungen \(x_1, \cdots, x_n\), gemessen in Radiant, ist ihre zirkuläre Standardabweichung definiert durch ([2], Gl. 2.3.11)

\[\sqrt{ -2 \log \left| \frac{1}{n} \sum_{k=1}^n e^{i x_k} \right| }\]

wobei \(i\) die imaginäre Einheit ist und \(|z|\) die Länge der komplexen Zahl \(z\) angibt. \(|z|\) im obigen Ausdruck ist bekannt als die mittlere resultierende Länge.

Parameter:
samplesarray_like

Eingabearray von Winkelbeobachtungen. Der Wert eines vollen Winkels entspricht (high - low).

highfloat, optional

Obere Grenze des Hauptwertes eines Winkels. Standardwert ist 2*pi.

lowfloat, optional

Untere Grenze des Hauptwertes eines Winkels. Standardwert ist 0.

normalizeboolean, optional

Wenn False (Standard), wird der Rückgabewert aus der obigen Formel mit der Eingabe skaliert mit (2*pi)/(high-low) und der Ausgabe (zurück) skaliert mit (high-low)/(2*pi) berechnet. Wenn True, wird die Ausgabe nicht skaliert und direkt zurückgegeben.

axisint oder None, Standard: None

Wenn es sich um eine ganze Zahl handelt, ist dies die Achse des Eingabearrays, entlang der die Statistik berechnet wird. Die Statistik jedes Achsen-Slices (z. B. Zeile) der Eingabe erscheint dann in einem entsprechenden Element der Ausgabe. Wenn None, wird die Eingabe vor der Berechnung der Statistik geglättet.

nan_policy{‘propagate’, ‘omit’, ‘raise’}

Definiert, wie Eingabe-NaNs behandelt werden.

  • propagate: Wenn ein NaN in der Achsen-Slice (z. B. Zeile) vorhanden ist, entlang der die Statistik berechnet wird, wird der entsprechende Eintrag der Ausgabe NaN sein.

  • omit: NaNs werden bei der Berechnung weggelassen. Wenn im Achsen-Slice, entlang dem die Statistik berechnet wird, nicht genügend Daten verbleiben, wird der entsprechende Eintrag der Ausgabe NaN sein.

  • raise: Wenn ein NaN vorhanden ist, wird ein ValueError ausgelöst.

keepdimsbool, Standard: False

Wenn dies auf True gesetzt ist, bleiben die reduzierten Achsen im Ergebnis als Dimensionen mit der Größe eins erhalten. Mit dieser Option wird das Ergebnis korrekt gegen das Eingabearray gestreut (broadcasted).

Rückgabe:
circstdfloat

Zirkuläre Standardabweichung, optional normalisiert.

Wenn das Eingabearray leer ist, wird np.nan zurückgegeben.

Siehe auch

circmean

Zirkulärer Mittelwert.

circvar

Zirkuläre Varianz.

Hinweise

Im Grenzfall kleiner Winkel ist die zirkuläre Standardabweichung nahe der „linearen“ Standardabweichung, wenn normalize False ist.

Seit SciPy 1.9 werden np.matrix-Eingaben (für neuen Code nicht empfohlen) vor der Berechnung in np.ndarray konvertiert. In diesem Fall ist die Ausgabe eine Skalar- oder np.ndarray mit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- oder np.ndarray anstelle eines Masked Arrays mit mask=False sein.

Referenzen

[1]

Mardia, K. V. (1972). 2. In Statistics of Directional Data (pp. 18-24). Academic Press. DOI:10.1016/C2013-0-07425-7.

[2]

Mardia, K. V. und Jupp, P. E. Directional Statistics. John Wiley & Sons, 1999.

Beispiele

>>> import numpy as np
>>> from scipy.stats import circstd
>>> import matplotlib.pyplot as plt
>>> samples_1 = np.array([0.072, -0.158, 0.077, 0.108, 0.286,
...                       0.133, -0.473, -0.001, -0.348, 0.131])
>>> samples_2 = np.array([0.111, -0.879, 0.078, 0.733, 0.421,
...                       0.104, -0.136, -0.867,  0.012,  0.105])
>>> circstd_1 = circstd(samples_1)
>>> circstd_2 = circstd(samples_2)

Zeichnet die Stichproben.

>>> fig, (left, right) = plt.subplots(ncols=2)
>>> for image in (left, right):
...     image.plot(np.cos(np.linspace(0, 2*np.pi, 500)),
...                np.sin(np.linspace(0, 2*np.pi, 500)),
...                c='k')
...     image.axis('equal')
...     image.axis('off')
>>> left.scatter(np.cos(samples_1), np.sin(samples_1), c='k', s=15)
>>> left.set_title(f"circular std: {np.round(circstd_1, 2)!r}")
>>> right.plot(np.cos(np.linspace(0, 2*np.pi, 500)),
...            np.sin(np.linspace(0, 2*np.pi, 500)),
...            c='k')
>>> right.scatter(np.cos(samples_2), np.sin(samples_2), c='k', s=15)
>>> right.set_title(f"circular std: {np.round(circstd_2, 2)!r}")
>>> plt.show()
../../_images/scipy-stats-circstd-1.png