numpy.histogram_bin_edges

numpy.histogram_bin_edges(a, bins=10, range=None, weights=None)[源代码]

函数仅计算 histogram 功能。

参数
aarray_like

输入数据。柱状图是通过展平的数组计算出来的。

binsscalars或str的int或sequence,可选

如果 bins 是一个int,它定义给定范围(默认为10)内等宽的箱数。如果 bins 是一个序列,它定义粮箱边缘,包括最右边的边缘,允许不均匀的粮箱宽度。

如果 bins 是下面列表中的字符串, histogram_bin_edges 将使用所选的方法来计算最佳箱子宽度,从而计算箱子数量(请参见 Notes 有关估计器的更多详细信息),请参阅所请求范围内的数据。虽然存储箱宽度将是范围内实际数据的最佳宽度,但将计算存储箱的数量以填充整个范围,包括空部分。对于可视化,建议使用“自动”选项。自动选择肥料箱大小不支持加权数据。

“汽车”

“sturges”和“fd”估计量的最大值。提供良好的全方位性能。

“fd”(Freedman-Diaconis估计量)

考虑数据可变性和数据大小的鲁棒(对异常值有弹性)估计。

“多恩”

Sturges估计量的一个改进版本,可以更好地处理非正常数据集。

“史葛”

考虑数据可变性和数据大小的不太可靠的估计量。

“石头”

基于遗漏一次交叉验证的综合平方误差估计。可以看作是斯科特法则的推广。

米饭

估计量不考虑可变性,只考虑数据大小。通常过高估计所需的垃圾箱数量。

斯图格斯

R的默认方法,只考虑数据大小。仅适用于高斯数据,并低估了大型非高斯数据集的箱数。

“平方”

(数据大小的)平方根估计量,用于Excel和其他程序以其速度和简单性。

range(浮动,浮动)可选

料仓的上下范围。如果没有提供,范围仅为 (a.min(), a.max()) . 超出范围的值将被忽略。范围的第一个元素必须小于或等于第二个元素。 range 也会影响自动肥料箱计算。同时,根据内部实际数据计算出的料位宽度是最佳的。 range ,bin计数将填充整个范围,包括不包含数据的部分。

weights阵列式,可选

重量数组,形状与 a . 每一个值 a 仅将其关联的重量贡献给肥料箱计数(而不是1)。这目前没有被任何一个bin估计数使用,但可能在将来使用。

返回
bin_edges数据类型浮点数组

要进入的边缘 histogram

参见

histogram

笔记

估计最佳垃圾箱数量的方法在文献中有很好的基础,并受到R提供的直方图可视化选择的启发。注意,箱子的数量与 n^{{1/3}} 是渐近最优的,这就是它在大多数估计中出现的原因。这些只是简单的插件方法,它们为垃圾箱的数量提供了良好的起点。在下面的方程式中, h 是宽度和 n_h 是箱子的数量。所有计算仓位计数的估计量都使用 ptp 数据。最终的仓数从 np.round(np.ceil(range / h)) .

'auto'('sturges'和'fd'估计量的最大值)

为了得到一个好的价值而做出的妥协。对于较小的数据集,通常会选择sturges值,而较大的数据集通常默认为fd。避免了fd和sturges分别对小数据集和大数据集的过度保守行为。切换点通常是 a.size \approx 1000 .

“fd”(Freedman-Diaconis估计量)

H=2 \frac iqr n ^ 1/3

料位宽度与四分位间距(IQR)成正比,与A.尺寸的立方根成反比。对于小数据集来说可能过于保守,但对于大数据集则相当好。IQR对异常值非常健壮。

“史葛”

System Message: WARNING/2 (h=\sigma\sqrt [3] \分数\π)

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2018-12-01> (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2018/09/03 v1.4i Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Undefined control sequence. <argument> \� l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> \� l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> \� l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> \� l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Package inputenc Error: Invalid UTF-8 byte "88. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Package inputenc Error: Invalid UTF-8 byte "86. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Package inputenc Error: Unicode character 数 (U+6570) (inputenc) not set up for use with LaTeX. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> ... {split}h=\sigma \sqrt [3] \分数\� �\end {split} l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Package inputenc Error: Invalid UTF-8 byte "80. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> \� l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> \� l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> \� l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> \� l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Package inputenc Error: Invalid UTF-8 byte "88. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Package inputenc Error: Invalid UTF-8 byte "86. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Package inputenc Error: Unicode character 数 (U+6570) (inputenc) not set up for use with LaTeX. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Undefined control sequence. <argument> ... {split}h=\sigma \sqrt [3] \分数\� �\end {split} l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} ! Package inputenc Error: Invalid UTF-8 byte "80. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...it}h=\sigma\sqrt [3] \分数\π\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 404 bytes). Transcript written on math.log.

binwidth与数据的标准偏差成正比,与数据的立方根成反比。 x.size . 对于小数据集来说可能过于保守,但对于大数据集则相当好。标准差对异常值不是很强。在没有异常值的情况下,这些值与Freedman-Diaconis估计量非常相似。

米饭

nYH= 2n^ { 1/3 }

垃圾箱的数量只与 a.size . 它倾向于高估存储箱的数量,并且不考虑数据的可变性。

斯图格斯

n_h=\log 2 n+1

箱子的数量是 a.size . 这种估计假设数据的正态性,对于较大的非正态数据集来说过于保守。这是r中的默认方法 hist 方法。

“多恩”

n_h = 1 + \log_{2}(n) +
            \log_{2}(1 + \frac{|g_1|}{\sigma_{g_1}})

g_1 = mean[(\frac{x - \mu}{\sigma})^3]

\sigma_{g_1} = \sqrt{\frac{6(n - 2)}{(n + 1)(n + 3)}}

Sturges公式的改进版本,可为非正态数据集生成更好的估计。这个估计器试图解释数据的歪斜。

“平方”

System Message: WARNING/2 (n~h=\qRT n)

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2018-12-01> (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2018/09/03 v1.4i Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Package inputenc Error: Unicode character = (U+FF1D) (inputenc) not set up for use with LaTeX. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 \begin{split}n~h=\qRT n\end{split} ! Undefined control sequence. <argument> \split@tag \begin {split}n~h=\qRT n\end {split} l.14 \begin{split}n~h=\qRT n\end{split} ! Package inputenc Error: Unicode character = (U+FF1D) (inputenc) not set up for use with LaTeX. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 \begin{split}n~h=\qRT n\end{split} ! Undefined control sequence. <argument> \split@tag \begin {split}n~h=\qRT n\end {split} l.14 \begin{split}n~h=\qRT n\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 244 bytes). Transcript written on math.log.

最简单、最快的估计量。只考虑数据大小。

实例

>>> 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. ])

为了与柱状图保持一致,通过未修改的方式传递一个预先计算的bin数组:

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

此函数允许计算一组箱,并在多个柱状图中重复使用:

>>> 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])

这比对每个柱状图使用单独的箱更容易获得可比较的结果:

>>> 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.  ])