有一天,我無法理解發生了什麼。我有一個工具可以根據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