numpy.
histogram_bin_edges
函数仅计算 histogram 功能。
histogram
输入数据。柱状图是通过展平的数组计算出来的。
如果 bins 是一个int,它定义给定范围(默认为10)内等宽的箱数。如果 bins 是一个序列,它定义粮箱边缘,包括最右边的边缘,允许不均匀的粮箱宽度。
如果 bins 是下面列表中的字符串, histogram_bin_edges 将使用所选的方法来计算最佳箱子宽度,从而计算箱子数量(请参见 Notes 有关估计器的更多详细信息),请参阅所请求范围内的数据。虽然存储箱宽度将是范围内实际数据的最佳宽度,但将计算存储箱的数量以填充整个范围,包括空部分。对于可视化,建议使用“自动”选项。自动选择肥料箱大小不支持加权数据。
“sturges”和“fd”估计量的最大值。提供良好的全方位性能。
考虑数据可变性和数据大小的鲁棒(对异常值有弹性)估计。
Sturges估计量的一个改进版本,可以更好地处理非正常数据集。
考虑数据可变性和数据大小的不太可靠的估计量。
基于遗漏一次交叉验证的综合平方误差估计。可以看作是斯科特法则的推广。
估计量不考虑可变性,只考虑数据大小。通常过高估计所需的垃圾箱数量。
R的默认方法,只考虑数据大小。仅适用于高斯数据,并低估了大型非高斯数据集的箱数。
(数据大小的)平方根估计量,用于Excel和其他程序以其速度和简单性。
料仓的上下范围。如果没有提供,范围仅为 (a.min(), a.max()) . 超出范围的值将被忽略。范围的第一个元素必须小于或等于第二个元素。 range 也会影响自动肥料箱计算。同时,根据内部实际数据计算出的料位宽度是最佳的。 range ,bin计数将填充整个范围,包括不包含数据的部分。
(a.min(), a.max())
重量数组,形状与 a . 每一个值 a 仅将其关联的重量贡献给肥料箱计数(而不是1)。这目前没有被任何一个bin估计数使用,但可能在将来使用。
要进入的边缘 histogram
参见
笔记
估计最佳垃圾箱数量的方法在文献中有很好的基础,并受到R提供的直方图可视化选择的启发。注意,箱子的数量与 是渐近最优的,这就是它在大多数估计中出现的原因。这些只是简单的插件方法,它们为垃圾箱的数量提供了良好的起点。在下面的方程式中, 是宽度和 是箱子的数量。所有计算仓位计数的估计量都使用 ptp 数据。最终的仓数从 np.round(np.ceil(range / h)) .
ptp
np.round(np.ceil(range / h))
为了得到一个好的价值而做出的妥协。对于较小的数据集,通常会选择sturges值,而较大的数据集通常默认为fd。避免了fd和sturges分别对小数据集和大数据集的过度保守行为。切换点通常是 .
料位宽度与四分位间距(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估计量非常相似。
x.size
垃圾箱的数量只与 a.size . 它倾向于高估存储箱的数量,并且不考虑数据的可变性。
a.size
箱子的数量是 a.size . 这种估计假设数据的正态性,对于较大的非正态数据集来说过于保守。这是r中的默认方法 hist 方法。
hist
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. ])