如何用首尾行/列作为填充创建一个填充的numpy数组?
我需要高效地在一个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]])