【问题标题】:How does matplotlib's histogramdd work?matplotlib 的 histogramdd 是如何工作的?
【发布时间】:2012-10-23 16:50:25
【问题描述】:

我发现 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. ])]

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

这应该如何解释?

谢谢

【问题讨论】:

    标签: python numpy histogram


    【解决方案1】:

    更新

    我上次错了。现在这是 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)
    

    到这里:

    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 和 4 属于array([ 1. , 3.33333333, 5.66666667, 8. ]) 的第二个 bin,因为它在 3.33333333 和 5.66666667 之间。所以我们有第一个 bin、第三个 bin 和第二个 bin 作为点 [1,2,4] 的坐标。这意味着我们正在计算第一个数组中的那个元素,第三行,第二列:

    [[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 0.,  1*.,  0.]] 
    

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

    [[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 1.,  0.,  1.*]]])
    

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

    [[ 0.,  0.,  0.],
     [ 0.,  0.,  0.],
     [ 1.*,  0.,  1.]]
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2021-12-11
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多