Учитывая 2d массив с именем array
...
import numpy as np
x, y = np.meshgrid(range(1,6), range(5))
array=x*y
array[0,0]=999
..., который выглядит так:
array([[999, 0, 0, 0, 0],
[ 1, 2, 3, 4, 5],
[ 2, 4, 6, 8, 10],
[ 3, 6, 9, 12, 15],
[ 4, 8, 12, 16, 20]])
мы можем получить значения вокруг границы с некоторыми вдумчивая нарезка ...
border = []
border += list(array[0, :-1]) # Top row (left to right), not the last element.
border += list(array[:-1, -1]) # Right column (top to bottom), not the last element.
border += list(array[-1, :0:-1]) # Bottom row (right to left), not the last element.
border += list(array[::-1, 0]) # Left column (bottom to top), all elements element.
ПРИМЕЧАНИЕ: мы не хотим пересчитывать углы. Вот почему мы не включаем последний элемент в каждый фрагмент строки / столбца. Однако в этом последнем утверждении мы включаем последний элемент для закрытия пути.
Значение border
:
array([999, 0, 0, 0, 0, 5, 10, 15, 20, 16, 12, 8, 4,
3, 2, 1, 999])
Я превратил это в функцию, которая позволяет Вам нужно указать, с какого угла начинать и ходить по массиву против часовой стрелки или по часовой стрелке (https://gist.github.com/blaylockbk/a70537b41050d1d761ab6c5ab6e4bd43)