numpy.histogram()如何工作?

问题描述 投票:107回答:3

在阅读numpy时,我遇到了函数numpy.histogram()

它是什么,它是如何工作的?在文档中他们提到了垃圾箱:它们是什么?

一些谷歌搜索引导我到definition of Histograms in general。我明白了。但不幸的是,我无法将这些知识与文档中给出的示例联系起来。

python numpy histogram
3个回答
150
投票

bin是表示沿X轴的直方图的单个条的宽度的范围。你也可以称之为间隔。 (维基百科将它们更正式地定义为“不相交的类别”。)

Numpy histogram函数不绘制直方图,但它计算出每个bin内的输入数据的出现次数,这反过来又决定了每个bar的区域(不一定是高度不等的高度)。

在这个例子中:

 np.histogram([1, 2, 1], bins=[0, 1, 2, 3])

有3个箱,值分别为0到1(不包括1),1到2(不包括2)和2到3(包括3)。 Numpy如果在这个例子中给出一个分隔符列表([0, 1, 2, 3])定义这些二进制的方式,虽然它也返回结果中的二进制位,因为如果没有指定,它可以自动从输入中选择它们。例如,如果bins=5,它将在最小输入值和最大输入值之间使用5个相等宽度扩展的区间。

输入值为1,2和1.因此,bin“1到2”包含两次出现(两个1值),bin“2到3”包含一次出现(2)。这些结果位于返回元组的第一项:array([0, 2, 1])

由于此处的箱柜宽度相等,因此您可以使用每个栏的高度出现次数。绘制时,您将拥有:

  • X轴上的范围/ bin [0,1]的高度为0的条形,
  • 范围/箱[1,2]的高度为2的杆,
  • 范围/箱[2,3]的高度为1的栏。

你可以直接使用Matplotlib绘制它(它的hist函数也返回bin和值):

>>> import matplotlib.pyplot as plt
>>> plt.hist([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]), <a list of 3 Patch objects>)
>>> plt.show()


60
投票
import numpy as np    
hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3], bins = range(5))

下面,hist表示bin#0中有0个项目,bin#1中有2个,bin#3中有4个,bin#4中有1个。

print(hist)
# array([0, 2, 4, 1])   

bin_edges表示bin#0是区间[0,1),bin#1是[1,2],...,bin#3是[3,4]。

print (bin_edges)
# array([0, 1, 2, 3, 4]))  

使用上面的代码,将输入更改为np.histogram,看看它是如何工作的。


但是一张图片胜过千言万语:

import matplotlib.pyplot as plt
plt.bar(bin_edges[:-1], hist, width = 1)
plt.xlim(min(bin_edges), max(bin_edges))
plt.show()   


4
投票

numpy.histogram有关的另一个有用的事情是将输出绘制为线图上的x和y坐标。例如:

arr = np.random.randint(1, 51, 500)
y, x = np.histogram(arr, bins=np.arange(51))
fig, ax = plt.subplots()
ax.plot(x[:-1], y)
fig.show()

enter image description here

这可以是一种可视化直方图的有用方法,您可以在不需要任何条形图的情况下获得更高级别的粒度。在图像直方图中非常有用,用于识别极端像素值。

© www.soinside.com 2019 - 2024. All rights reserved.