直方图为零数组提供错误的bin

时间:2015-09-24 11:18:24

标签: python numpy matplotlib

plt.hist(np.zeros((784,1)), bins=2)

这应该产生直方图,其中bin的所有值都为0,但输出为: plot

怎么了?

2 个答案:

答案 0 :(得分:2)

不满足于你的期望,也许这会有所帮助:

箱子代表间隔。该函数计算每个bin(或间隔)内输入数据的出现次数。

考虑这个例子:

plt.hist(np.zeros((784)), bins=(0,1,2))

有2个区间,第一个用于0 to 1的值,第二个用于1 to 2的值。因此,您将784'计数'在第一个,没有'计数'在第二个intervall。这将产生以下结果:

enter image description here

现在,如果您将bins=(0,1,2)替换为bins=2,则会在minimum input值和maximum input值之间使用2个相等宽度的间隔。由于输入中只有zeros,因此需要-0,5 as minimum+0,5 as maximum,从而产生上面显示的直方图:不计算'介于-0,5 to 0之间784 zeros0 and +0,5之间的所有plt.hist(np.zeros((784)), bins=7)

enter image description here

所以我想你想要的是一个以零为中心的细条,你可以通过例如设置箱=一些更大的奇数:

{{1}}

enter image description here

答案 1 :(得分:2)

plt.hist的工作原理。例如,您有一个类似(3, 5, 1, 7, 4, 3, 9, 0, 2)的列表,并使用plt.hist将其传递给bins=3。 Hist将所有数字分配到3个类别(例如0-2,3-6,7-9)并绘制3个bin。每个bin的高度表示分配给相应类别的数字的数量。在这种情况下,高度将为(3, 4, 2)。在您的情况下,bins=2和类别类似于(-0.5-0.0001,0-0.5)。所有784个零都分配到第二个bin,而第一个bin是空的。

matplotlob中还有另一个函数可以正常工作,因为你可能希望plt.hist起作用。它是plt.bar。你可以将垃圾箱的高度传递给它,它将对它们无效并只绘制直方图。您可以这样使用它:

plt.bar(np.arange(784), np.zeros((784,1)))

它将为您提供784个零高度条。