在一个numpy ndarray找到邻居

时间:2014-08-15 16:19:04

标签: python numpy

我有一个问题,我有一个numpy ndarray。现在,这个数组可以是2D或3D,具体取决于可用的输入,我想要做的是沿每个轴获得每个样本的“先前”邻居。所以在2D中,如果想象下面的数组:

1 2 3 4
5 6 7 8
4 3 2 1

现在我只需要实际具有有效“前一个”邻居的值的索引(因此不包括顶部和左边框条目)。所以这应该归还给我(类似的东西):

[[0, 1], [1, 0]], [[1, 1], [2, 0]], [[2, 1], [3, 0]] # corresponding to 6, 7, 8 entries
[[0, 2], [1, 1]], [[1, 2], [2, 1]], [[2, 2], [3, 1]] # corresponding to 3, 2, 1 entries

基本上只考虑子阵列。

6 7 8
3 2 1

此外,如果它是3D,则存在另一个轴但具有类似规则,即仅获得具有有效条目的子阵列。然后,我想使用这些索引来操作原始数组中的条目。但是,我无法弄清楚如何有效地生成这些索引,而不需要在ndarray的轴(也没有修复)上使用循环。

2 个答案:

答案 0 :(得分:0)

好的,我明白了。在我的情况下,我可以简单地使用numpy指数。如下所示:

import numpy as np
i = np.indices(x-2 for x in data.shape)

然后我可以用它作为:

data[i[0], i[1], i[2]...]

答案 1 :(得分:0)

考虑您提供的数据

@SpringBootApplication
@EnableHystrix
public class SpringCloudApp {
public static void main(String[] args) {
SpringApplication.run(SpringCloudApp.class, args);
    }
}

然后,如果我理解正确的话,使用切片将为您提供所需的确切信息,即

import numpy as np
data = np.array([[1, 2, 3, 4],
                 [5, 6, 7, 8],
                 [4, 3, 2, 1]])

因此,如果有效的先前邻居意味着在这些项目的上方和左侧有邻居,则只需对数组的每个维度应用相同的切片>>> data[1:, 1:] array([[6, 7, 8], [3, 2, 1]]) 。在3D 1:等中