Как вы получаете значения по периметру массива numpy в Python? - PullRequest
1 голос
/ 01 февраля 2020

У меня есть массив 2d numpy, но я просто хочу, чтобы значения вокруг границы были представлены в виде списка, как если бы вы шли по периметру поля.

Чтобы проиллюстрировать, для двумерного массива я хочу начать с одного угла и получить значения по всему полю

enter image description here

поэтому результат выглядит следующим образом ... enter image description here

1 Ответ

0 голосов
/ 01 февраля 2020

Учитывая 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...