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
的邊緣
另請參閱
註解
用於估計最佳箱數的方法在文獻中都有充分的根據,並且受到 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. ])