binned_statistic_dd#
- scipy.stats.binned_statistic_dd(sample, values, statistic='mean', bins=10, range=None, expand_binnumbers=False, binned_statistic_result=None)[Quelle]#
Berechnet eine mehrdimensionale binned Statistik für einen Datensatz.
Dies ist eine Verallgemeinerung der Funktion `histogramdd`. Ein Histogramm teilt den Raum in Bins auf und gibt die Anzahl der Punkte in jedem Bin zurück. Diese Funktion ermöglicht die Berechnung der Summe, des Mittelwerts, des Medians oder anderer Statistiken der Werte innerhalb jedes Bins.
- Parameter:
- samplearray_like
Daten, die als Histogramm übergeben werden, als Sequenz von N Arrays der Länge D oder als (N,D) Array.
- values(N,) array_like oder Liste von (N,) array_like
Die Daten, auf denen die Statistik berechnet wird. Diese müssen die gleiche Form wie sample haben, oder eine Liste von Sequenzen – jede mit der gleichen Form wie sample. Wenn values eine solche Liste ist, wird die Statistik unabhängig voneinander für jede berechnet.
- statisticstring oder callable, optional
Die zu berechnende Statistik (Standard ist 'mean'). Die folgenden Statistiken sind verfügbar
‘mean’ : berechnet den Mittelwert der Werte für Punkte innerhalb jedes Bins. Leere Bins werden durch NaN dargestellt.
‘median’ : berechnet den Median der Werte für Punkte innerhalb jedes Bins. Leere Bins werden durch NaN dargestellt.
‘count’ : berechnet die Anzahl der Punkte innerhalb jedes Bins. Dies ist identisch mit einem ungewichteten Histogramm. Das values-Array wird nicht referenziert.
‘sum’ : berechnet die Summe der Werte für Punkte innerhalb jedes Bins. Dies ist identisch mit einem gewichteten Histogramm.
‘std’ : Standardabweichung pro Bin berechnen. Dies wird implizit mit ddof=0 berechnet. Wenn die Anzahl der Werte in einem bestimmten Bin 0 oder 1 beträgt, ist der berechnete Wert der Standardabweichung für das Bin 0.
‘min’ : berechnet das Minimum der Werte für Punkte innerhalb jedes Bins. Leere Bins werden durch NaN dargestellt.
‘max’ : berechnet das Maximum der Werte für Punkte innerhalb jedes Bins. Leere Bins werden durch NaN dargestellt.
function : eine benutzerdefinierte Funktion, die ein 1D-Array von Werten entgegennimmt und eine einzelne numerische Statistik zurückgibt. Diese Funktion wird für die Werte in jedem Bin aufgerufen. Leere Bins werden durch function([]) dargestellt, oder durch NaN, wenn diese einen Fehler zurückgibt.
- binsSequenz oder positive Ganzzahl, optional
Die Bin-Spezifikation muss in einer der folgenden Formen vorliegen:
Eine Sequenz von Arrays, die die Bin-Grenzen entlang jeder Dimension beschreiben.
Die Anzahl der Bins für jede Dimension (nx, ny, … = bins).
Die Anzahl der Bins für alle Dimensionen (nx = ny = … = bins).
- rangeSequenz, optional
Eine Sequenz von unteren und oberen Bin-Grenzen, die verwendet werden sollen, wenn die Grenzen nicht explizit in bins angegeben sind. Standardmäßig werden die minimalen und maximalen Werte entlang jeder Dimension verwendet.
- expand_binnumbersbool, optional
‘False’ (Standard): das zurückgegebene binnumber ist ein Array der Form (N,) mit linearisierten Bin-Indizes. ‘True’: das zurückgegebene binnumber wird in ein Array der Form (D,N) „aufgelöst“, wobei jede Zeile die Bin-Nummern in der entsprechenden Dimension angibt. Siehe den Rückgabewert binnumber und den Abschnitt Beispiele in
binned_statistic_2d.- binned_statistic_resultbinnedStatisticddResult
Ergebnis eines vorherigen Aufrufs der Funktion, um Bin-Grenzen und Bin-Nummern mit neuen Werten und/oder einer anderen Statistik wiederzuverwenden. Um Bin-Nummern wiederzuverwenden, muss expand_binnumbers auf False gesetzt worden sein (Standard).
Hinzugefügt in Version 0.17.0.
- Rückgabe:
- statisticndarray, Form (nx1, nx2, nx3,…)
Die Werte der ausgewählten Statistik in jedem zweidimensionalen Bin.
- bin_edgesListe von ndarrays
Eine Liste von D Arrays, die die (nxi + 1) Bin-Grenzen für jede Dimension beschreiben.
- binnumber(N,) Array von Integern oder (D,N) ndarray von Integern
Dies weist jedem Element von sample eine ganze Zahl zu, die das Bin darstellt, in das diese Beobachtung fällt. Die Darstellung hängt vom Argument expand_binnumbers ab. Siehe Hinweise für Details.
Siehe auch
Hinweise
Binedges: Alle Bins außer dem letzten (rechtesten) sind in jeder Dimension halboffen. Das heißt, wenn bins
[1, 2, 3, 4]ist, dann ist der erste Bin[1, 2)(einschließlich 1, aber ausschließend 2) und der zweite[2, 3). Der letzte Bin ist jedoch[3, 4], der 4 *einschließt*.binnumber: Dieses zurückgegebene Argument weist jedem Element von sample eine ganze Zahl zu, die das Bin darstellt, zu dem es gehört. Die Darstellung hängt vom Argument expand_binnumbers ab. Wenn ‘False’ (Standard): Das zurückgegebene binnumber ist ein Array der Form (N,) mit linearisierten Indizes, die jedes Element von sample seinem entsprechenden Bin zuordnen (unter Verwendung der zeilenweisen Reihenfolge). Wenn ‘True’: Das zurückgegebene binnumber ist ein ndarray der Form (D,N), bei dem jede Zeile die Bin-Platzierungen für jede Dimension einzeln angibt. In jeder Dimension bedeutet eine Bin-Nummer von i, dass der entsprechende Wert zwischen (bin_edges[D][i-1], bin_edges[D][i]) für jede Dimension „D“ liegt.
Hinzugefügt in Version 0.11.0.
Beispiele
>>> import numpy as np >>> from scipy import stats >>> import matplotlib.pyplot as plt >>> from mpl_toolkits.mplot3d import Axes3D
Nehmen Sie ein Array von 600 (x, y)-Koordinaten als Beispiel.
binned_statistic_ddkann Arrays höherer Dimension D verarbeiten. Aber ein Plot der Dimension D+1 ist erforderlich.>>> mu = np.array([0., 1.]) >>> sigma = np.array([[1., -0.5],[-0.5, 1.5]]) >>> multinormal = stats.multivariate_normal(mu, sigma) >>> data = multinormal.rvs(size=600, random_state=235412) >>> data.shape (600, 2)
Erstelle Bins und zähle, wie viele Arrays in jeden Bin fallen
>>> N = 60 >>> x = np.linspace(-3, 3, N) >>> y = np.linspace(-3, 4, N) >>> ret = stats.binned_statistic_dd(data, np.arange(600), bins=[x, y], ... statistic='count') >>> bincounts = ret.statistic
Lege das Volumen und die Position der Balken fest
>>> dx = x[1] - x[0] >>> dy = y[1] - y[0] >>> x, y = np.meshgrid(x[:-1]+dx/2, y[:-1]+dy/2) >>> z = 0
>>> bincounts = bincounts.ravel() >>> x = x.ravel() >>> y = y.ravel()
>>> fig = plt.figure() >>> ax = fig.add_subplot(111, projection='3d') >>> with np.errstate(divide='ignore'): # silence random axes3d warning ... ax.bar3d(x, y, z, dx, dy, bincounts)
Verwende Bin-Nummern und Bin-Grenzen mit neuen Werten wieder
>>> ret2 = stats.binned_statistic_dd(data, -np.arange(600), ... binned_statistic_result=ret, ... statistic='mean')