更新
我上次错了。现在这是 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.]]