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.
这应该怎么解释?
谢谢
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)
| 归档时间: |
|
| 查看次数: |
2410 次 |
| 最近记录: |