binned_statistic_dd#
- scipy.stats.binned_statistic_dd(sample, values, statistic='mean', bins=10, range=None, expand_binnumbers=False, binned_statistic_result=None)[source]#
為一組資料計算多維分箱統計。
這是 histogramdd 函數的推廣。直方圖將空間劃分為箱子,並傳回每個箱子中點的計數。此函數允許計算每個箱子內數值的總和、平均值、中位數或其他統計量。
- 參數:
- samplearray_like (類陣列)
要繪製直方圖的資料,以長度為 D 的 N 個陣列的序列,或以 (N,D) 陣列形式傳遞。
- values(N,) array_like (類陣列) 或 (N,) array_like (類陣列) 列表
將在其上計算統計量的資料。這必須與 sample 具有相同的形狀,或與 sample 具有相同形狀的序列列表。如果 values 是這樣一個列表,則將獨立計算每個列表的統計量。
- statistic字串或可呼叫物件,選填
要計算的統計量 (預設為 ‘mean’)。以下統計量可用
‘mean’ : 計算每個箱子內點的數值平均值。空箱子將以 NaN 表示。
‘median’ : 計算每個箱子內點的數值中位數。空箱子將以 NaN 表示。
‘count’ : 計算每個箱子內點的計數。這與未加權的直方圖相同。不會參考 values 陣列。
‘sum’ : 計算每個箱子內點的數值總和。這與加權直方圖相同。
‘std’ : 計算每個箱子內的標準差。這是使用 ddof=0 隱式計算的。如果給定箱子內數值的數量為 0 或 1,則計算出的標準差值將為 0。
‘min’ : 計算每個箱子內點的數值最小值。空箱子將以 NaN 表示。
‘max’ : 計算每個箱子內點的數值最大值。空箱子將以 NaN 表示。
function : 一個使用者定義的函數,它接受一個數值的一維陣列,並輸出一個單一數值統計量。此函數將在每個箱子中的數值上呼叫。空箱子將以 function([]) 表示,如果這返回錯誤,則以 NaN 表示。
- bins (箱子)序列或正整數,選填
箱子規格必須採用以下形式之一
描述每個維度上箱子邊緣的陣列序列。
每個維度的箱子數量 (nx, ny, … = bins)。
所有維度的箱子數量 (nx = ny = … = bins)。
- range (範圍)序列,選填
如果未在 bins 中明確給出邊緣,則要使用的一系列下限和上限箱子邊緣。預設為每個維度上的最小值和最大值。
- expand_binnumbers (展開箱號)布林值,選填
‘False’ (預設值):傳回的 binnumber 是一個形狀為 (N,) 的線性化箱子索引陣列。‘True’:傳回的 binnumber 被「展開」成一個形狀為 (D,N) 的 ndarray,其中每一行都給出了相應維度中的箱號。請參閱 binnumber 傳回值,以及
binned_statistic_2d
的 範例 章節。- binned_statistic_resultbinnedStatisticddResult
為了使用新的數值和/或不同的統計量來重複使用箱子邊緣和箱號,先前呼叫函數的結果。若要重複使用箱號,expand_binnumbers 必須設定為 False (預設值)
在版本 0.17.0 中新增。
- 傳回值:
- statistic (統計量)ndarray,形狀為 (nx1, nx2, nx3,…)
每個二維箱子中選定統計量的值。
- bin_edges (箱子邊緣)ndarray 列表
描述每個維度的 (nxi + 1) 個箱子邊緣的 D 個陣列的列表。
- binnumber (箱號)(N,) 整數陣列或 (D,N) 整數 ndarray
這會為 sample 的每個元素分配一個整數,該整數表示此觀察值所屬的箱子。表示形式取決於 expand_binnumbers 參數。詳情請參閱 Notes。
註解
箱子邊緣:除了最後一個(最右邊)箱子外,每個維度中的所有箱子都是半開區間。換句話說,如果 bins 是
[1, 2, 3, 4]
,則第一個箱子是[1, 2)
(包含 1,但不包含 2),第二個箱子是[2, 3)
。但是,最後一個箱子是[3, 4]
,它包含 4。binnumber:此傳回的引數為 sample 的每個元素分配一個整數,該整數表示其所屬的箱子。表示形式取決於 expand_binnumbers 引數。如果為 ‘False’ (預設值):傳回的 binnumber 是一個形狀為 (N,) 的線性化索引陣列,將 sample 的每個元素對應到其對應的箱子 (使用 row-major 排序)。如果為 ‘True’:傳回的 binnumber 是一個形狀為 (D,N) 的 ndarray,其中每一行分別指示每個維度的箱子位置。在每個維度中,i 的箱號表示對應的值介於 (bin_edges[D][i-1], bin_edges[D][i]) 之間,對於每個維度 ‘D’。
在版本 0.11.0 中新增。
範例
>>> import numpy as np >>> from scipy import stats >>> import matplotlib.pyplot as plt >>> from mpl_toolkits.mplot3d import Axes3D
以 600 個 (x, y) 坐標的陣列為例。
binned_statistic_dd
可以處理更高維度 D 的陣列。但需要維度 D+1 的繪圖。>>> 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)
建立箱子並計算每個箱子中有多少陣列落入
>>> 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
設定長條圖的體積和位置
>>> 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)
使用新數值重複使用箱號和箱子邊緣
>>> ret2 = stats.binned_statistic_dd(data, -np.arange(600), ... binned_statistic_result=ret, ... statistic='mean')