如何使用第一行/最后一行/列作为填充来制作带衬垫的numpy数组?

Mar*_*rkD 0 python arrays numpy vectorization

我需要使用第一行和最后一行/列作为填充数据,在所有4个边上有效地填充numpy数组.例如,给出以下内容:

A=np.array([[1    2   3   4],
            [5    6   7   8],
            [9   10  11  12]])
Run Code Online (Sandbox Code Playgroud)

我想结束:

B=np.array([[1    1    2    3    4    4],
            [1    1    2    3    4    4],
            [5    5    6    7    8    8],
            [9    9   10   11   12   12],
            [9    9   10   11   12   12]])
Run Code Online (Sandbox Code Playgroud)

注意原始数组A位于:B [1:-1,1:-1].我假设我可以首先在一个方向(水平或垂直)填充,以获得重复的角点值.但是,我的矢量化/ numpification让我失望了.(注意:我正在使用的数组非常大,我需要多次执行此选项,因此有效地执行它是关键 - 我可以使用循环来完成它,但它很慢).

Ale*_*ley 6

使用np.pad,您可以指定填充的宽度和要应用于数组的填充模式.对于示例数组,edge填充模式提供了所需的结果:

>>> np.pad(A, 1, 'edge')
array([[ 1,  1,  2,  3,  4,  4],
       [ 1,  1,  2,  3,  4,  4],
       [ 5,  5,  6,  7,  8,  8],
       [ 9,  9, 10, 11, 12, 12],
       [ 9,  9, 10, 11, 12, 12]])
Run Code Online (Sandbox Code Playgroud)