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 einValueErrorausgelö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, wirdnp.nanzurückgegeben.
Hinweise
Seit SciPy 1.9 werden
np.matrix-Eingaben (für neuen Code nicht empfohlen) vor der Berechnung innp.ndarraykonvertiert. In diesem Fall ist die Ausgabe eine Skalar- odernp.ndarraymit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- odernp.ndarrayanstelle eines Masked Arrays mitmask=Falsesein.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()