用自己的另一侧填充numpy数组

时间:2018-12-06 04:44:35

标签: python numpy padding

假设我有一个数组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能够做到这一点,但是我可能错过了一些东西。

1 个答案:

答案 0 :(得分: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]]