如何用首尾行/列作为填充创建一个填充的numpy数组?

1 投票
1 回答
1600 浏览
提问于 2025-04-30 16:29

我需要高效地在一个numpy数组的四周添加边框,使用数组的第一行、最后一行、第一列和最后一列作为填充的数据。例如,给定以下内容:

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

我想得到的是:

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

注意,原始数组A的位置在:B[1:-1,1:-1]。我想我可以先在一个方向上填充(横向或纵向),再在另一个方向上填充,这样就能得到重复的角落值。不过,我在向量化和使用numpy时遇到了问题。(注意:我正在处理的数组相当大,而且我需要多次执行这个操作,所以高效性非常重要——我可以用循环来做,但速度太慢了)。

暂无标签

1 个回答

7

使用 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]])

撰写回答