Pad numpy массив с противоположной стороной

Допустим, у меня есть массив A:

A = 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]])

Я хочу преобразовать его в эту матрицу B:

array([[24, 20, 21, 22, 23, 24, 20],
       [ 4,  0,  1,  2,  3,  4,  0],
       [ 9,  5,  6,  7,  8,  9,  5],
       [14, 10, 11, 12, 13, 14, 10],
       [19, 15, 16, 17, 18, 19, 15],
       [24, 20, 21, 22, 23, 24, 20],
       [ 4,  0,  1,  2,  3,  4,  0]])

Идея в том, что если вы отойдете от первоначального края A, вы столкнетесь с противоположной стороной. т.е. строка сверху будет нижней, столбец слева от исходного первого столбца будет последним столбцом, верхний левый будет нижним правым и т. д.

В настоящее время я делаю это с помощью этого:

B = np.concatenate(([A[-1]], A, [A[0]]), axis=0).T
B = np.concatenate(([B[-1]], B, [B[0]]), axis=0).T

Что делает эту работу, выглядит просто и относительно прямолинейно; у меня вопрос, есть ли встроенный метод или другие хитрые способы, которые не требуют, чтобы я вручную брал края и устанавливал их? Я не знаю, что np.pad может это сделать, но, возможно, я что-то пропустил.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что вы ищете np.pad с mode = "wrap":

a = np.arange(25).reshape(5, 5)
b = np.pad(a, 1, 'wrap')
print(a)
print(b)

приводит к

[[ 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]]
[[24 20 21 22 23 24 20]
 [ 4  0  1  2  3  4  0]
 [ 9  5  6  7  8  9  5]
 [14 10 11 12 13 14 10]
 [19 15 16 17 18 19 15]
 [24 20 21 22 23 24 20]
 [ 4  0  1  2  3  4  0]]

Другие вопросы по теме