numpy.histogram_bin_edges
numpy.histogram_bin_edges(a, bins=10, range=None, weights=None) [source]
仅计算histogram
函数使用的bin边缘的函数。
参数 : | a :array_like 输入数据。直方图是在展平的数组上计算的。 bins :int 或 sequence of scalars 或 str, 可选 如果bins是一个int, 则它定义给定范围内的等宽 bins数(默认为10个)。 如果bin是序列,则它将定义bin边缘(包括最右边), 从而允许非均匀的bin宽度。 如果bins是下面列表中的字符串,
从而根据落下的数据计算bin的数量 (有关估计量的更多信息,请参见“Notes”)。 在要求的范围内。虽然箱宽对于该范围内的实际数据而言是最佳的, 但bins 数将被计算为填充整个范围,包括空白部分。 为了实现可视化,建议使用 ‘auto’ 选项。 自动箱大小选择不支持加权数据。 'sturges'和' fd'估计量的最大值。提供良好的整体性能。 考虑数据可变性和数据大小的健壮(对离群值有弹性)估计器。 Sturges ' estimator的改进版本,能更好地处理非正规数据集。 考虑到数据可变性和数据大小的不太稳健的估计。 基于leave-one-out cross-validation的综合平方误差估计的估计量。 可以看作是斯科特规则的概括。 估计器不考虑可变性,只考虑数据的大小。 通常高估所需bins的数量。 R的默认方法,只考虑数据大小。只对高斯数据最优, 对大的非高斯数据集低估bins数。 平方根(数据大小)估计器,用于Excel和其他程序的速度和简单。 range :(float, float), 可选 bins的上下范围。如果未提供,则范围只是 超出范围的值将被忽略。范围的第一个元素必须小于或等于第二个。 范围也会影响自动bin计算。 虽然根据范围内的实际数据计算出箱宽是最佳的, 但箱数将填充整个范围,包括不包含数据的部分。 weights :array_like, 可选 一组与a形状相同的weights。 每个中的每个值仅将其相关权重分配给bin计数(而不是1)。 目前,任何bin估算器均未使用此功能,但将来可能会使用。 |
返回值 : | bin_edges :array of dtype float 要传递到 |
Notes
估计箱的最佳数量的方法在文献中已经建立,并且受到R为直方图可视化提供的选择的启发。请注意,使bins数与比例成正比是渐近最优的,这就是为什么它出现在大多数估计器中的原因。这些都是简单的插件方法,可为bins数量提供良好的起点。在下面的公式中,是binwidth和bin的数量。使用数据的ptp
将所有计算bin计数的估计器重转成为bin宽度。最终的bin计数是从np.round(np.ceil(range / h))
获得的。
‘auto’ (maximum of the ‘sturges’ and ‘fd’ estimators)
为了得到一个好的价值而做出的妥协。对于小型数据集,Sturges值通常会被选择,而大型数据集通常会默认为FD。避免FD和Sturges分别对小数据集和大数据集过于保守的行为。切换点通常在
‘fd’ (Freedman Diaconis Estimator)
binwidth与四分位范围(IQR)成正比,与a的立方根成反比。对于小数据集可能过于保守,但对于大数据集非常好。IQR对异常值非常稳健。
‘scott’
binwidth与数据的标准偏差成正比,与x.size的立方根成反比。对于小数据集可能过于保守,但对于大数据集非常好。标准差对离群值不是很稳健。在没有异常值的情况下,值非常类似于Freedman-Diaconis估计量。
‘rice’
bins的数量只与a.size的立方根成正比。它倾向于高估bins的数量,而不考虑数据的可变性。
‘sturges’
bins的数量以a.size的2 log为底。该估计量假设数据正态性,对于较大的非正态数据集过于保守。这是R的hist
方法中的默认方法。
‘doane’
斯特奇斯公式的改进版本,对非正常数据集产生更好的估计。这个估计器试图解释数据的歪斜。
‘sqrt’
最简单最快的估计值。只考虑数据大小。
例子
>>> 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. ])