我正在尝试为数组中的每个元素创建一个邻居数组。有没有办法使用矢量化技术来加快速度?
我使用了一个嵌套的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]]]
(此代码不考虑极端情况)
答案 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())]