numpy.histogram_bin_edges#

numpy.histogram_bin_edges(a, bins=10, range=None, weights=None)[source]#

此函數僅計算 histogram 函數所使用的箱 (bin) 邊緣。

參數:
aarray_like (類陣列)

輸入資料。直方圖 (histogram) 是針對展平 (flattened) 後的陣列計算。

bins (箱數)int (整數) 或 純量 (scalars) 序列或 str (字串), 選項性

如果 bins 是整數,它定義給定範圍內等寬箱 (預設為 10) 的數量。如果 bins 是序列,它定義箱邊緣,包括最右邊緣,允許非均勻的箱寬。

如果 bins 是下方列表中的字串,histogram_bin_edges 將使用選擇的方法來計算最佳箱寬,並因此計算箱數 (有關估算器的更多詳細資訊,請參閱「Notes」章節),這些箱數是根據落在請求範圍內的資料計算得出。雖然箱寬對於範圍內的實際資料而言是最佳的,但箱數將被計算以填滿整個範圍,包括空白部分。對於視覺化,建議使用 'auto' 選項。自動箱尺寸選擇不支援加權資料。

‘auto’

‘sturges’ 和 ‘fd’ 估算器之間的最小箱寬。提供良好的全方位效能。

‘fd’ (Freedman Diaconis Estimator)

穩健 (可抵抗離群值) 估算器,它考量資料變異性和資料大小。

‘doane’

Sturges 估算器的改良版本,適用於非常態資料集。

‘scott’

較不穩健的估算器,它考量資料變異性和資料大小。

‘stone’

基於留一法交叉驗證的估算器,用於估計積分平方誤差。可以視為 Scott 規則的推廣。

‘rice’

估算器不考慮變異性,僅考慮資料大小。通常會高估所需的箱數。

‘sturges’

R 的預設方法,僅考量資料大小。僅適用於高斯資料,並且對於大型非高斯資料集會低估箱數。

‘sqrt’

平方根 (資料大小的平方根) 估算器,Excel 和其他程式因其速度和簡便性而使用。

range (範圍)(float, float), 選項性

箱的下限和上限範圍。如果未提供,範圍預設為 (a.min(), a.max())。範圍之外的值將被忽略。範圍的第一個元素必須小於或等於第二個元素。range 也會影響自動箱數計算。雖然箱寬是根據 range 內實際資料計算為最佳值,但箱數將填滿整個範圍,包括不包含資料的部分。

weights (權重)array_like (類陣列), 選項性

權重陣列,形狀與 a 相同。a 中的每個值僅將其相關聯的權重貢獻給箱數 (而不是 1)。目前任何箱估算器都未使用此功能,但未來可能會使用。

回傳值:
bin_edges (箱邊緣)dtype (資料型別) 為 float (浮點數) 的陣列

要傳遞到 histogram 的邊緣

另請參閱

histogram

註解

用於估計最佳箱數的方法在文獻中都有充分的根據,並且受到 R 為直方圖視覺化提供的選擇所啟發。請注意,箱數與 \(n^{1/3}\) 成比例在漸近意義上是最佳的,這就是為什麼它出現在大多數估算器中的原因。這些只是插入式 (plug-in) 方法,為箱數提供了良好的起點。在下面的方程式中,\(h\) 是箱寬,而 \(n_h\) 是箱數。所有計算箱數的估算器都使用資料的 ptp 重新轉換為箱寬。最終箱數是從 np.round(np.ceil(range / h)) 獲得的。最終箱寬通常小於下方估算器回傳的值。

‘auto’ ( ‘sturges’ 和 ‘fd’ 估算器的最小箱寬 )

取得良好值的折衷方案。對於小型資料集,通常會選擇 Sturges 值,而較大型資料集通常會預設為 FD。避免 FD 和 Sturges 分別針對小型和大型資料集過於保守的行為。轉換點通常為 \(a.size \approx 1000\)

‘fd’ (Freedman Diaconis Estimator)
\[h = 2 \frac{IQR}{n^{1/3}}\]

箱寬與四分位數間距 (IQR) 成正比,與 a.size 的立方根成反比。對於小型資料集可能過於保守,但對於大型資料集來說相當不錯。IQR 對離群值非常穩健。

‘scott’
\[h = \sigma \sqrt[3]{\frac{24 \sqrt{\pi}}{n}}\]

箱寬與資料的標準差成正比,與 x.size 的立方根成反比。對於小型資料集可能過於保守,但對於大型資料集來說相當不錯。標準差對離群值不夠穩健。在沒有離群值的情況下,值與 Freedman-Diaconis 估算器非常相似。

‘rice’
\[n_h = 2n^{1/3}\]

箱數僅與 a.size 的立方根成正比。它傾向於高估箱數,並且不考慮資料變異性。

‘sturges’
\[n_h = \log _{2}(n) + 1\]

箱數是以 2 為底的 a.size 對數。此估算器假設資料常態分佈,對於較大的非常態資料集而言過於保守。這是 R 的 hist 方法中的預設方法。

‘doane’
\[ \begin{align}\begin{aligned}n_h = 1 + \log_{2}(n) + \log_{2}\left(1 + \frac{|g_1|}{\sigma_{g_1}}\right)\\g_1 = mean\left[\left(\frac{x - \mu}{\sigma}\right)^3\right]\\\sigma_{g_1} = \sqrt{\frac{6(n - 2)}{(n + 1)(n + 3)}}\end{aligned}\end{align} \]

Sturges 公式的改良版本,可為非常態資料集產生更好的估計值。此估算器嘗試考量資料的偏度。

‘sqrt’
\[n_h = \sqrt n\]

最簡單且最快速的估算器。僅考量資料大小。

此外,如果資料為整數 (integer) dtype (資料型別),則箱寬永遠不會小於 1。

範例

>>> import numpy as np
>>> arr = np.array([0, 0, 0, 1, 2, 3, 3, 4, 5])
>>> np.histogram_bin_edges(arr, bins='auto', range=(0, 1))
array([0.  , 0.25, 0.5 , 0.75, 1.  ])
>>> np.histogram_bin_edges(arr, bins=2)
array([0. , 2.5, 5. ])

為了與 histogram 一致,預先計算的箱陣列將不經修改地傳遞

>>> np.histogram_bin_edges(arr, [1, 2])
array([1, 2])

此函數允許計算一組箱,並在多個直方圖 (histogram) 中重複使用

>>> shared_bins = np.histogram_bin_edges(arr, bins='auto')
>>> shared_bins
array([0., 1., 2., 3., 4., 5.])
>>> group_id = np.array([0, 1, 1, 0, 1, 1, 0, 1, 1])
>>> hist_0, _ = np.histogram(arr[group_id == 0], bins=shared_bins)
>>> hist_1, _ = np.histogram(arr[group_id == 1], bins=shared_bins)
>>> hist_0; hist_1
array([1, 1, 0, 1, 0])
array([2, 0, 1, 1, 2])

與為每個直方圖 (histogram) 使用單獨的箱相比,這能提供更容易比較的結果

>>> hist_0, bins_0 = np.histogram(arr[group_id == 0], bins='auto')
>>> hist_1, bins_1 = np.histogram(arr[group_id == 1], bins='auto')
>>> hist_0; hist_1
array([1, 1, 1])
array([2, 1, 1, 2])
>>> bins_0; bins_1
array([0., 1., 2., 3.])
array([0.  , 1.25, 2.5 , 3.75, 5.  ])