在写作业的时候遇到的,np.pad()就像剥洋葱一样,一层一层的加。
比如说:
arr3D = np.array([[[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4]],
[[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5]],
[[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4]]])
这样一个array, 做下面这个操作:
np.pad(array, ((x1, y1), (x2, y2), (x3, y3)), 'constant')
(x1, y1)是对最外面这个中括号操作的,就是对这个中括号里面的元素, 按照尺寸,首尾分别添加 x1, y1 个零array(图示为我在终端的操作)。
>>> np.pad(arr3D, ((1, 1), (0, 0), (0, 0)), 'constant')
array([[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]],
[[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4]],
[[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5]],
[[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4]],
[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]])
那么同理可得(x2,y2)就是对第二个中括号首尾加上同规格的零array。
注意arr3D没有变哦。
>>> np.pad(arr3D, ((0,0),(1,1),(0,0)), 'constant')
array([[[0, 0, 0, 0, 0, 0],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[0, 0, 0, 0, 0, 0]],
[[0, 0, 0, 0, 0, 0],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 0, 0, 0, 0, 0]],
[[0, 0, 0, 0, 0, 0],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[1, 1, 2, 2, 3, 4],
[0, 0, 0, 0, 0, 0]]])
以此类推,(X3,y3)就是对第三组中括号,最小的那组,首尾添加x3,y3个同规格零元素,这里就是0。
>>> np.pad(arr3D, ((0,0),(0,0),(1,1)), 'constant')
array([[[0, 1, 1, 2, 2, 3, 4, 0],
[0, 1, 1, 2, 2, 3, 4, 0],
[0, 1, 1, 2, 2, 3, 4, 0]],
[[0, 0, 1, 2, 3, 4, 5, 0],
[0, 0, 1, 2, 3, 4, 5, 0],
[0, 0, 1, 2, 3, 4, 5, 0]],
[[0, 1, 1, 2, 2, 3, 4, 0],
[0, 1, 1, 2, 2, 3, 4, 0],
[0, 1, 1, 2, 2, 3, 4, 0]]])
>>>
我们最后来测试一下维度:
>>> out = np.pad(arr3D, ((0,0),(1,1),(1,1)), 'constant')
>>> out
array([[[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 2, 2, 3, 4, 0],
[0, 1, 1, 2, 2, 3, 4, 0],
[0, 1, 1, 2, 2, 3, 4, 0],
[0, 0, 0, 0, 0, 0, 0, 0]],
[[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 2, 3, 4, 5, 0],
[0, 0, 1, 2, 3, 4, 5, 0],
[0, 0, 1, 2, 3, 4, 5, 0],
[0, 0, 0, 0, 0, 0, 0, 0]],
[[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 2, 2, 3, 4, 0],
[0, 1, 1, 2, 2, 3, 4, 0],
[0, 1, 1, 2, 2, 3, 4, 0],
[0, 0, 0, 0, 0, 0, 0, 0]]])
>>> out.shape
(3, 5, 8)
也就是说,array的维度也是从中括号由外往里进行的。