アップデート
前回間違えました。これが、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)
2 番目のアプローチを使用すると、適切な結果が得られます。
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.])
1 と 2 の間にあるため の最初のビンに属し、2 はarray([ 1. , 1.33333333, 1.66666667, 2. ])
1.6666667 と 2 の間にあるため の 3 番目のビンに属し、4 はarray([ 1. , 3.33333333, 5.66666667, 8. ])
3.33333333 と 5.66666667 の間にあるための 2 番目のビンに属します。 . したがって、ポイントの座標の最初のビン、3 番目のビン、および 2 番目のビンがあります[1,2,4]
。これは、最初の配列、3 行目、2 列目の要素をカウントしていることを意味します。
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1*., 0.]]
* を追加して、より簡単に識別できるようにしました。2 番目の座標[4,2,8]
は、それぞれ x、y、z の 3 番目のビン、3 番目のビン、および 3 番目のビンにあります (3 番目の配列、3 番目の行、3 番目の列)。
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 1., 0., 1.*]]])
最後の例として、3 番目の座標[3,2,1]
は、それぞれ x、y、z の 3 番目のビン、3 番目のビン、1 番目のビンにあります (3 番目の配列、3 番目の行、1 列目)。
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 1.*, 0., 1.]]