matplotlib的histogramdd如何工作?

Rob*_*ith 4 python numpy histogram

我发现histogramdd的输出令人困惑.例如:

h, edges = histogramdd([[1,2,1],[4,2,1]],bins=2)

h -> [[ 1.  1.]
     [ 1.  0.]]
edges -> [array([ 1. ,  1.5,  2. ]), array([ 1. ,  2.5,  4. ])]
Run Code Online (Sandbox Code Playgroud)

也许我不理解文档,但似乎建议输入应该是一个数组,其中N行表示数据点,D列表示维度(所以在这种情况下,我们处理三维中的两个数据点)我想每个数组edges代表一个不同的维度,但根据输出似乎没有意义h.

这应该怎么解释?

谢谢

Rob*_*ith 6

UPDATE

我最后一次错了.现在这是histogramdd的正确解释.首先,在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)
Run Code Online (Sandbox Code Playgroud)

对此:

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)
Run Code Online (Sandbox Code Playgroud)

使用第二种方法,我们获得了明智的结果:

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.        ])]
Run Code Online (Sandbox Code Playgroud)

我们的意见是[1,2,4], [4,2,8], etc.edges表示每个维度的bin.在这个例子中,[1,2,4]计算如下:1属于第一个bin,array([1.,2.,3.,4.])因为它在1和2之间,2属于第三个bin,array([ 1. , 1.33333333, 1.66666667, 2. ])因为它在1.6666667和2之间,而且4属于第二个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.]] 
Run Code Online (Sandbox Code Playgroud)

我添加了一个*来让你更容易识别它.第二个坐标分别[4,2,8]位于x,y,z的第三个bin,第三个bin和第三个bin中(第三个数组,第三行,第三列):

[[ 0.,  0.,  0.],
[ 0.,  0.,  0.],
[ 1.,  0.,  1.*]]])
Run Code Online (Sandbox Code Playgroud)

作为最后一个例子,第三个坐标分别[3,2,1]位于x,y,z的第三个bin,第三个bin和第一个bin中(第三个数组,第三行,第一列):

[[ 0.,  0.,  0.],
 [ 0.,  0.,  0.],
 [ 1.*,  0.,  1.]]
Run Code Online (Sandbox Code Playgroud)