NumPy参考 >例行程序 >Statistics > numpy.histogram_bin_edges
numpy.
histogram_bin_edges
(a,bins = 10,range = None,weights = None )[源代码] ¶仅计算函数使用的垃圾箱边缘的histogram
函数。
输入数据。直方图是在平坦数组上计算的。
如果bins是一个int,则它将在给定范围内定义等宽宽度的bin数(默认为10个)。如果bin是序列,则它将定义bin边缘(包括最右边),从而允许非均匀的bin宽度。
如果bin是下面列表中的字符串,histogram_bin_edges
则将使用选择的方法来计算最佳bin宽度,并因此根据落入请求范围内的数据计算bin的数量(请参阅“ 注释”以获取有关估计器的更多详细信息)。虽然箱宽对于该范围内的实际数据而言是最佳的,但箱数将被计算为填充整个范围,包括空白部分。为了可视化,建议使用“自动”选项。自动箱大小选择不支持加权数据。
“ sturges”和“ fd”估计量的最大值。提供良好的全方位性能。
考虑到数据可变性和数据大小的稳健(对异常值具有弹性)的估计器。
Sturges估计器的改进版本,可以更好地与非常规数据集一起使用。
考虑数据可变性和数据大小的鲁棒估计器。
基于积分平方误差的留一法交叉验证估计的估计器。可以看作是斯科特规则的概括。
估计器不考虑可变性,仅考虑数据大小。通常会高估所需的垃圾箱数量。
R的默认方法,仅考虑数据大小。仅对高斯数据最佳,而对于大型非高斯数据集则低估了bin的数量。
Excel和其他程序使用平方根(数据大小)估计量,以求其速度和简便性。
垃圾箱的上下范围。如果未提供,则范围为。超出范围的值将被忽略。范围的第一个元素必须小于或等于第二个。范围也会影响自动bin计算。虽然根据范围内的实际数据计算出箱宽是最佳的,但箱数将填充整个范围,包括不包含数据的部分。(a.min(), a.max())
权重的阵列相同的形状的,一个。每个中的每个值 仅将其关联权重分配给仓位计数(而不是1)。目前,任何bin估算器均未使用此功能,但将来可能会使用。
要进入的边缘 histogram
也可以看看
笔记
估计箱的最佳数量的方法在文献中已经有很好的基础,并且受到R为直方图可视化提供的选择的启发。请注意,与数量成正比的仓数是渐近最优的,这就是为什么它出现在大多数估计器中的原因。这些都是简单的插件方法,可为垃圾箱数量提供良好的起点。在下面的公式中,
是binwidth和
bin的数量。使用
ptp
数据的,将所有计算仓位计数的估计器都重新转换为仓位宽度。最终箱计数从获得
。np.round(np.ceil(range / h))
妥协以获得良好的价值。对于小型数据集,通常将选择“ Strurges”值,而大型数据集通常将默认为FD。避免分别针对小型和大型数据集的FD和Sturges过于保守的行为。切换点通常是。
Binwidth与四分位间距(IQR)成正比,与a.size的立方根成反比。对于小型数据集可能过于保守,但对于大型数据集则非常好。IQR对于异常值非常健壮。
Binwidth与数据的标准偏差成正比,与的立方根成反比x.size
。对于小型数据集可能过于保守,但对于大型数据集则非常好。标准偏差对异常值不是很稳健。在没有异常值的情况下,值与Freedman-Diaconis估计量非常相似。
箱数仅与的立方根成正比
a.size
。它往往高估了bin的数量,并且没有考虑数据的可变性。
箱数是的以2为底的对数a.size
。此估算器假定数据是正态性的,对于较大的非正态数据集而言过于保守。这是R方法中的默认
hist
方法。
Sturges公式的改进版本,可以为非正态数据集提供更好的估计。该估计器尝试考虑数据的偏斜。
最简单,最快的估算器。仅考虑数据大小。
例子
>>> 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])
此功能允许计算一组bin,并在多个直方图中重复使用:
>>> 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])
与为每个直方图使用单独的bin相比,这提供了更容易比较的结果:
>>> 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. ])