如何从numpy 2d数组的每个元素中创建邻居数组

时间:2019-05-08 02:37:01

标签: python numpy

我正在尝试为数组中的每个元素创建一个邻居数组。有没有办法使用矢量化技术来加快速度?

我使用了一个嵌套的for循环来迭代要创建的数组中的每个元素。

初始数组

self.grid = np.zeros((256,256), np.uint)

初始数组之外的邻居数组

        for i in range(256):
            for j in range(256):

                grid = [[self.grid[i-1][j-1], self.grid[i][j-1], self.getGrid[i+1][j-1]],
                        [self.grid[i-1][j], self.grid[i][j], self.grid[i+1][j]],
                        [self.grid[i-1][j+1], self.grid[i][j+1], self.grid[i+1][j+1]]]

(此代码不考虑极端情况)

1 个答案:

答案 0 :(得分:0)

您可以使用np.roll()来移动数组并生成邻居数组。这具有“滚动”边界的额外好处(即,最右边的元素的右侧是最左边的元素)。

关于您的示例,这是一个可能使用np.roll的实现,尽管我怀疑它是最干净的:

left=np.roll(self.grid,1,axis=1)
right=np.roll(self.grid,-1,axis=1)
down=np.roll(self.grid,-1,axis=0)
up=np.roll(self.grid,1,axis=0)
leftbottom=np.roll(left,-1,axis=0)
rightbottom=np.roll(right,-1,axis=0)
lefttop=np.roll(left,1,axis=0)
righttop=np.roll(right,1,axis=0)

neighbors=[np.array(i) for i in zip(left.flatten(),
                                   right.flatten(),
                                   down.flatten(),
                                   up.flatten(),
                                   leftbottom.flatten(),
                                   rightbottom.flatten(),
                                   lefttop.flatten(),
                                   righttop.flatten())]