UPDATE
我錯了最後一次。現在這是直方圖的正確解釋。首先,這是非常重要的histogramdd使用數組,否則會輸出錯誤的結果:
比較:
In [59]: h, edges = histogramdd([[1,2,4],[4,2,8],[3,2,1],[2,1,2],[2,1,3],[2,1,1],[2,1,4]],bins=3)
h.shape
Out[59]: (3, 3, 3, 3, 3, 3, 3)
這樣:
In [60]: h, edges = histogramdd(array([[1,2,4],[4,2,8],[3,2,1],[2,1,2],[2,1,3],[2,1,1],[2,1,4]]),bins=3)
h.shape
Out[60]: (3, 3, 3)
使用第二種方法,我們獲得了明顯的結果:
In [61]: h, edges = histogramdd(array([[1,2,4],[4,2,8],[3,2,1],[2,1,2],[2,1,3],[2,1,1],[2,1,4]]),bins=3)
In [64]: h
Out[64]:
array([[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.]],
[[ 3., 1., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 1., 0., 1.]]])
In [65]: edges
Out[65]:
[array([ 1., 2., 3., 4.]),
array([ 1. , 1.33333333, 1.66666667, 2. ]),
array([ 1. , 3.33333333, 5.66666667, 8. ])]
我們的輸入是[1,2,4], [4,2,8], etc
。邊代表每個維的箱。在這個例子中,[1,2,4]
的計數如下:1屬於array([1.,2.,3.,4.])
的第一個bin,因爲它在1和2之間,2屬於array([ 1. , 1.33333333, 1.66666667, 2. ])
的第三個bin,因爲它介於1.6666667和2之間,屬於第二個bin的array([ 1. , 3.33333333, 5.66666667, 8. ])
,因爲它是在3.33333333和5.66666667之間。所以我們有第一個bin,第三個bin和第二個bin作爲點[1,2,4]
的座標。這意味着我們指望第一個數組中的元素,第三行第二列:
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1*., 0.]]
我加了*,讓你更容易地識別它。第二座標[4,2,8]
位於第三倉,第三bin和第三箱,用於X,Y,Z分別(第三陣列,第三行,第三列):
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 1., 0., 1.*]]])
作爲最後一個例子中,第三座標[3,2,1]
分別位於x,y,z(第三排,第三排,第一列)的第三個倉,第三個倉和第一個倉中:
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 1.*, 0., 1.]]