Попробуйте:
def neighbours(grid, i, j):
rows = np.array([-1, -1, -1, 0, 0, 1, 1, 1])
cols = np.array([-1, 0, 1, -1, 1, -1, 0, 1])
return grid[rows+i,cols+j]
Редактировать: Пример :
grid = np.arange(25).reshape((5,5))
#array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14],
# [15, 16, 17, 18, 19],
# [20, 21, 22, 23, 24]])
neighbours(grid, 0, 0)
# array([24, 20, 21, 4, 1, 9, 5, 6])
Объяснение :
С numpy
Вы можете использовать отрицательные индексы, позволяющие легко получить доступ к последним записям массива.Это также будет работать для нескольких измерений:
x = np.array([0,1,2,3])
x[-1]
# 3
x.reshape((2,2))
#array([[0, 1],
# [2, 3]])
x[-1,-1]
# 3
Вас интересуют 8 элементов матрицы.
- слева вверху -> строка - 1, столбец - 1
- выше -> строка - 1, столбец + 0
- справа вверху -> строка - 1, столбец + 1
- слева -> строка + 0, столбец - 1
- ...
Вот что представляют собой массивы rows
и cols
.Добавив i
и j
, вы получите все записи вокруг этих координат.