scipy.stats.

circmean#

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

Berechnet den Kreisumfangsmittelwert einer Stichprobe von Winkelbeobachtungen.

Gegeben \(n\) Winkelbeobachtungen \(x_1, \cdots, x_n\) in Radiant gemessen, ist ihr *Kreisumfangsmittelwert* definiert durch ([1], Gl. 2.2.4)

\[\mathrm{Arg} \left( \frac{1}{n} \sum_{k=1}^n e^{i x_k} \right)\]

wobei \(i\) die imaginäre Einheit ist und \(\mathop{\mathrm{Arg}} z\) den Hauptwert des Arguments der komplexen Zahl \(z\) angibt, standardmäßig auf den Bereich \([0,2\pi]\) beschränkt. \(z\) im obigen Ausdruck ist als der *mittlere Richtungvektor* bekannt.

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.

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

Kreisumfangsmittelwert, beschränkt auf den Bereich [low, high].

Wenn der mittlere Richtungvektor Null ist, wird eine von der Eingabe abhängige, implementierungsdefinierte Zahl zwischen [low, high] zurückgegeben. Wenn das Eingabearray leer ist, wird np.nan zurückgegeben.

Siehe auch

circstd

Kreisumfangsstandardabweichung.

circvar

Kreisumfangsvarianz.

Hinweise

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. und Jupp, P. E. Directional Statistics. John Wiley & Sons, 1999.

Beispiele

Zur besseren Lesbarkeit werden alle Winkel in Grad ausgegeben.

>>> import numpy as np
>>> from scipy.stats import circmean
>>> import matplotlib.pyplot as plt
>>> angles = np.deg2rad(np.array([20, 30, 330]))
>>> circmean = circmean(angles)
>>> np.rad2deg(circmean)
7.294976657784009
>>> mean = angles.mean()
>>> np.rad2deg(mean)
126.66666666666666

Zeichnet den Kreisumfangsmittelwert im Vergleich zum arithmetischen Mittel auf und vergleicht sie.

>>> plt.plot(np.cos(np.linspace(0, 2*np.pi, 500)),
...          np.sin(np.linspace(0, 2*np.pi, 500)),
...          c='k')
>>> plt.scatter(np.cos(angles), np.sin(angles), c='k')
>>> plt.scatter(np.cos(circmean), np.sin(circmean), c='b',
...             label='circmean')
>>> plt.scatter(np.cos(mean), np.sin(mean), c='r', label='mean')
>>> plt.legend()
>>> plt.axis('equal')
>>> plt.show()
../../_images/scipy-stats-circmean-1.png