scipy.stats.

binned_statistic_2d#

scipy.stats.binned_statistic_2d(x, y, values, statistic='mean', bins=10, range=None, expand_binnumbers=False)[原始碼]#

為一或多組資料計算雙維分箱統計。

這是 histogram2d 函數的推廣。直方圖將空間劃分為箱,並返回每個箱中點的計數。此函數允許計算每個箱內的值(或值集)的總和、平均值、中位數或其他統計量。

參數:
x(N,) array_like

沿第一維分箱的值序列。

y(N,) array_like

沿第二維分箱的值序列。

values(N,) array_like 或 (N,) array_like 列表

將在其上計算統計量的資料。這必須與 x 的形狀相同,或是一個序列列表 - 每個序列都與 x 的形狀相同。如果 values 是這樣一個列表,則將獨立計算每個列表的統計量。

statistic字串或可呼叫物件,可選

要計算的統計量(預設為 ‘mean’)。以下統計量可用

  • ‘mean’ : 計算每個箱內點的值的平均值。空箱將以 NaN 表示。

  • ‘std’ : 計算每個箱內的標準差。這是使用 ddof=0 隱式計算的。

  • ‘median’ : 計算每個箱內點的值的中位數。空箱將以 NaN 表示。

  • ‘count’ : 計算每個箱內點的計數。這與未加權的直方圖相同。values 陣列未被參考。

  • ‘sum’ : 計算每個箱內點的值的總和。這與加權直方圖相同。

  • ‘min’ : 計算每個箱內點的值的最小值。空箱將以 NaN 表示。

  • ‘max’ : 計算每個箱內點的值的最大值。空箱將以 NaN 表示。

  • function : 使用者定義的函數,它接受一維值陣列,並輸出單個數值統計量。此函數將在每個箱中的值上呼叫。空箱將以 function([]) 表示,如果這返回錯誤,則以 NaN 表示。

binsint 或 [int, int] 或 array_like 或 [array, array],可選

箱規格

  • 兩個維度的箱數量 (nx = ny = bins),

  • 每個維度的箱數量 (nx, ny = bins),

  • 兩個維度的箱邊緣 (x_edge = y_edge = bins),

  • 每個維度的箱邊緣 (x_edge, y_edge = bins)。

如果指定了箱邊緣,則箱的數量將為 (nx = len(x_edge)-1, ny = len(y_edge)-1)。

range(2,2) array_like,可選

沿每個維度的箱的最左邊和最右邊的邊緣(如果未在 bins 參數中明確指定):[[xmin, xmax], [ymin, ymax]]。超出此範圍的所有值將被視為離群值,並且不會在直方圖中統計。

expand_binnumbersbool,可選

‘False’ (預設):返回的 binnumber 是形狀為 (N,) 的陣列,包含線性化的箱索引。 ‘True’:返回的 binnumber 被「展開」為形狀為 (2,N) 的 ndarray,其中每行給出相應維度中的箱編號。請參閱返回的 binnumber 值,以及 範例 區段。

在 0.17.0 版本中新增。

返回:
statistic(nx, ny) ndarray

每個二維箱中所選統計量的值。

x_edge(nx + 1) ndarray

沿第一維的箱邊緣。

y_edge(ny + 1) ndarray

沿第二維的箱邊緣。

binnumber(N,) 整數陣列 或 (2,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 是形狀為 (2,N) 的 ndarray,其中每行分別指示每個維度的箱位置。在每個維度中,i 的箱編號表示對應值介於 (D_edge[i-1], D_edge[i]) 之間,其中 ‘D’ 是 ‘x’ 或 ‘y’。

在 0.11.0 版本中新增。

範例

>>> from scipy import stats

使用明確的箱邊緣計算計數

>>> x = [0.1, 0.1, 0.1, 0.6]
>>> y = [2.1, 2.6, 2.1, 2.1]
>>> binx = [0.0, 0.5, 1.0]
>>> biny = [2.0, 2.5, 3.0]
>>> ret = stats.binned_statistic_2d(x, y, None, 'count', bins=[binx, biny])
>>> ret.statistic
array([[2., 1.],
       [1., 0.]])

每個樣本放置在其中的箱由傳回的 binnumber 參數給出。預設情況下,這些是線性化的箱索引

>>> ret.binnumber
array([5, 6, 5, 9])

箱索引也可以使用 expand_binnumbers 參數展開為每個維度的單獨條目

>>> ret = stats.binned_statistic_2d(x, y, None, 'count', bins=[binx, biny],
...                                 expand_binnumbers=True)
>>> ret.binnumber
array([[1, 1, 1, 2],
       [1, 2, 1, 1]])

這顯示前三個元素屬於 x 箱 1,第四個元素屬於 x 箱 2;y 也是如此。