Допустим, у меня есть массив 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 может это сделать, но, возможно, я что-то пропустил.






Я считаю, что вы ищете 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]]