有一天,我无法理解发生了什么。我有一个工具可以根据X,Y,Z坐标(Z在当时不重要)的数组(Numpy数组)生成2D直方图。我需要将结果归一化,以便进一步计算。但是,使用normed = True命令时,数组的总和总是在0.000006左右。Matplotlib histogram2d正常化不等于1
我正在寻找归一化整个直方图,所以所有的数组元素将加起来为1.设置为False正确返回bin中的样本数,但显然这是不规范化的。我已经用从3k元素到30k元的数组进行了测试,仍然是同样的问题。为了记录我的数据包括所有3个轴上的负坐标。
代码如下:
def histogrammer(coords): # coords is a 3D numpy array
H, xedges, yedges = np.histogram2d(coords[:,0], coords[:,1], bins=(50, 50), range=([-10000.0,10000.0],[-10000.0,10000.0]), normed=True)
H.shape, xedges.shape, yedges.shape
extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]
global displayHistograms
if displayHistograms == True:
print('Displaying:')
plt.imshow(H, extent=extent, interpolation='nearest')
plt.colorbar()
plt.show()
print('{0:.30f}'.format(np.sum(H))) # Debug normalisation
return H
我运行两个数组此代码,生成两个不同的直方图。每个打印语句:
0.000006250000000000000299510850
0.000006250000000000002840609692
任何人都可以告诉我哪里出错了吗?预先感谢任何帮助!
对,我现在明白了!有趣的是,现在我在上面列出的标准化之后得到了'0.999999999999998778754672912328'。我已经检查过,'H'中的总项目与'coords'数组中的相同。 – Tomassino 2012-07-11 19:25:20
忽略上述注释,我将打印语句的精度更改为.2f,数字四舍五入为1.0。 – Tomassino 2012-07-11 21:37:56