Вы можете использовать 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)
neighbors2 = [np.array(i) for i in zip(*(np.ndarray.flatten(i) \
for i in (left, right, down, up, leftbottom, rightbottom, lefttop, righttop)))]