NumPy histogram() 函数用于计算一组数据的直方图。使用该函数的语法如下:
语法
numpy.histogram(a, bins=10, range=None, normed=None, weights=None, density=None)
参数
a | 必填。 指定输入数据,直方图是在展平的数组上计算的。 |
bins | 可选。 指定bin。如果 bins 是 int,则它定义给定范围内等宽 bin 的数量(默认为 10)。如果 bins 是一个序列,它定义一个单调递增的 bin 边缘数组,包括最右边的边缘,允许不均匀的 bin 宽度。 |
range | 可选。 指定 bin 的下限和上限范围。如果未提供,范围只是 (a.min(), a.max())。超出范围的值将被忽略。范围的第一个元素必须小于或等于第二个元素。 |
normed | 可选。等价于密度论证。自版本 1.6.0 起已弃用。 |
weight | 可选。 指定一个权重数组,其形状与a相同。 |
density | 可选。 如果设置为 False,结果将包含每个 bin 中的样本数。如果为 True,则结果是 bin 处概率密度函数的值。 |
返回值
返回直方图。
示例:创建直方图
在下面的示例中,histogram() 函数用于创建直方图的值。
import numpy as np
Arr = np.arange(101)
#创建 10 个bin - 在本例中
#bin 将包含 10 个元素,最后一个
#bin 将包含 11 个元素。例如
#[0,10) bin 将包含 0, 1, ..., 9。
HistArr = np.histogram(Arr)
print(HistArr)
上述代码的输出将是:
(array([10, 10, 10, 10, 10, 10, 10, 10, 10, 11]),
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.]))
示例:带有 bin 和范围参数的直方图
bins 参数用于指定直方图中的 bin 数量,range 参数用于指定用于创建直方图的数据范围。
import numpy as np
Arr = np.arange(101)
#为范围 [0, 40] 创建 5 个 bin - 在本例中
#每个 bin 将包含 8 个元素,最后一个
#bin 将包含 9 个元素。
HistArr = np.histogram(Arr, bins=5, range=(0,40))
print(HistArr)
上述代码的输出将是:
(array([8, 8, 8, 8, 9]),
array([ 0., 8., 16., 24., 32., 40.]))
示例:带有 bin 和密度参数的直方图
在下面的示例中,bins 参数作为带有密度参数的序列提供。该序列定义了 bin 边缘,并将密度设置为 True 以获取 bin 处的概率密度函数。
import numpy as np
Arr = np.arange(101)
b = np.array([0,10,20,30,40])
HistArr1 = np.histogram(Arr, bins=b, density=False)
HistArr2 = np.histogram(Arr, bins=b, density=True)
print("HistArr1 is:")
print(HistArr1)
print("\nHistArr2 is:")
print(HistArr2)
上述代码的输出为:
HistArr1 is:
(array([10, 10, 10, 11]),
array([ 0, 10, 20, 30, 40]))
HistArr2 is:
(array([0.02439024, 0.02439024, 0.02439024, 0.02682927]),
array([ 0, 10, 20, 30, 40]))
示例:使用 matplotlib 绘制直方图
Matplotlib 是 Python 编程语言的绘图库。 matplotlib 的 hist() 函数与 numpy 的 histogram() 函数类似,可以与 numpy 对象一起使用以图形方式创建直方图,如下例所示。
import matplotlib.pyplot as plt
import numpy as np
Arr = np.array([45,64,5,22,55,89,59,35,78,42,34,15])
b = np.array([0,20,40,60,80,100])
plt.hist(Arr, bins = b, edgecolor='blue')
plt.title("Histogram")
plt.show()
上述代码的输出将是: