在阅读numpy时,我遇到了函数numpy.histogram()
。
它是用来做什么的,它是如何工作的?在文档中,他们提到了:它们是什么?
通过谷歌搜索,我找到了definition of Histograms in general。我明白了。但不幸的是,我不能将这些知识与文档中给出的例子联系起来。
发布于 2012-02-04 23:09:39
柱状图是表示直方图沿X轴的单个条形宽度的范围。您也可以将其称为间隔。(维基百科更正式地将它们定义为“不相交的类别”。)
Numpy histogram
函数不会绘制直方图,但它会计算每个条形图中输入数据的出现次数,进而确定每个条形图的面积(如果条形图的宽度不相等,则不一定是高度)。
在此示例中:
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]
)来定义这些bin的方式,尽管它也会在结果中返回bin,因为如果没有指定,它可以自动从输入中选择它们。例如,如果为bins=5
,它将使用5个等宽分布在最小输入值和最大输入值之间的存储箱。
输入值为1、2和1。因此,bin "1 to 2“包含两个实例(两个1
值),bin "2 to 3”包含一个实例( 2
)。这些结果位于返回的元组的第一项中:array([0, 2, 1])
。
由于此处的存储箱具有相同的宽度,因此您可以使用每个条形的高度的引用次数。绘制后,您将拥有:
你可以直接用Matplotlib来绘制(它的hist
函数也会返回箱子和值):
>>> 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()
发布于 2012-02-04 23:23:05
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
表示仓位#0是区间[0,1],仓位#1是[1,2),...,仓位#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()
发布于 2017-12-29 05:33:15
使用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()
这可能是可视化直方图的一种有用的方法,在这种情况下,您需要更高级别的粒度,而不是到处都是条形图。在识别极端像素值的图像直方图中非常有用。
https://stackoverflow.com/questions/9141732
复制相似问题