numpy.histogram#
- numpy.histogram(a, bins=10, range=None, density=None, weights=None)[source]#
计算数据集的直方图。
- 参数:
- aarray_like
输入数据。直方图是在扁平化的数组上计算的。
- binsint 或标量序列或 str,可选
如果 bins 是一个整数,它定义了给定范围内的等宽箱数(默认为 10)。如果 bins 是一个序列,它定义了一个单调递增的箱边缘数组,包括最右边的边缘,允许非均匀箱宽度。
版本 1.11.0 中的新功能。
如果 bins 是一个字符串,它定义了用于计算最优箱宽的方法,由
histogram_bin_edges
定义。- range(float, float),可选
箱子的下限和上限。如果未提供,则范围只是
(a.min(), a.max())
。范围之外的值将被忽略。范围的第一个元素必须小于或等于第二个。 range 也影响自动箱计算。虽然箱宽是根据 range 内的实际数据计算为最优的,但箱数将填充整个范围,包括不包含数据的部分。- weightsarray_like,可选
一个权重数组,与 a 形状相同。 a 中的每个值仅对其关联的权重做出贡献,以计算箱数(而不是 1)。如果 density 为 True,则权重被标准化,以便密度在范围内的积分仍然为 1。请注意,weights 的
dtype
也会成为返回的累加器 (hist) 的dtype
,因此它必须足够大以容纳累积值。- densitybool,可选
如果为
False
,则结果将包含每个箱中的样本数。如果为True
,则结果是箱中概率密度函数的值,已标准化,使得在范围内的积分等于 1。请注意,除非选择单位宽度的箱,否则直方图值的总和将不等于 1;它不是概率质量函数。
- 返回值:
- histarray
直方图的值。有关可能的语义说明,请参见 density 和 weights。如果给出了 weights,则
hist.dtype
将取自 weights。- bin_edgesdtype 为 float 的数组
返回箱边缘
(length(hist)+1)
。
注释
除了最后一个(最右边的)箱之外,所有箱都是半开箱。换句话说,如果 bins 是
[1, 2, 3, 4]
则第一个箱是
[1, 2)
(包含 1,但不包含 2),第二个是[2, 3)
。但是,最后一个箱是[3, 4]
,它包含 4。示例
>>> import numpy as np >>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3]) (array([0, 2, 1]), array([0, 1, 2, 3])) >>> np.histogram(np.arange(4), bins=np.arange(5), density=True) (array([0.25, 0.25, 0.25, 0.25]), array([0, 1, 2, 3, 4])) >>> np.histogram([[1, 2, 1], [1, 0, 1]], bins=[0,1,2,3]) (array([1, 4, 1]), array([0, 1, 2, 3]))
>>> a = np.arange(5) >>> hist, bin_edges = np.histogram(a, density=True) >>> hist array([0.5, 0. , 0.5, 0. , 0. , 0.5, 0. , 0.5, 0. , 0.5]) >>> hist.sum() 2.4999999999999996 >>> np.sum(hist * np.diff(bin_edges)) 1.0
版本 1.11.0 中的新功能。
自动箱选择方法示例,使用具有 2000 个点的 2 个峰值随机数据。
import matplotlib.pyplot as plt import numpy as np rng = np.random.RandomState(10) # deterministic random data a = np.hstack((rng.normal(size=1000), rng.normal(loc=5, scale=2, size=1000))) plt.hist(a, bins='auto') # arguments are passed to np.histogram plt.title("Histogram with 'auto' bins") plt.show()