Skip to the content.

numpy.pad 用法示例


Contact me:

Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub


在CNN中,很常见的操作是对图像padding,如果使用numpy的话有一个很有用的函数numpy.pad (官方文档),下面是一些用法示例

>>> import numpy as np
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
# 对每一个维度操作,因为是二维所以操作两个维度,此处以0填充为例子
# 列是第一个维度,行是第二个维度
>>> np.pad(a, ((0, 0), (0, 0)), 'constant', constant_values=0)
array([[1, 2, 3],
       [4, 5, 6]])
# 此处表示都没有填充

>>> np.pad(a, ((0, 0), (0, 1)), 'constant', constant_values=0)
array([[1, 2, 3, 0],
       [4, 5, 6, 0]])
# 可以看到,在第一维也就是列,(0, 0) 操作表示不填充
# 第二维也就是行,(0, 1) 表示前面填充0个,后面填充1个

>>> np.pad(a, ((0, 1), (0, 0)), 'constant', constant_values=0)
array([[1, 2, 3],
       [4, 5, 6],
       [0, 0, 0]])
# 列后面填充,前面没有填充,行都没有填充

>>> np.pad(a, ((1, 1), (1, 2)), 'constant', constant_values=0)
array([[0, 0, 0, 0, 0, 0],
       [0, 1, 2, 3, 0, 0],
       [0, 4, 5, 6, 0, 0],
       [0, 0, 0, 0, 0, 0]])
# 结果就显而易见,列上前后各填充1个,行上前面填充1个,后面填充2个

# 为了填充不同的数字,需要对后面的值修改
>>> np.pad(a, ((1, 1), (1, 2)), 'constant', constant_values=(0, 1))
array([[0, 0, 0, 0, 1, 1],
       [0, 1, 2, 3, 1, 1],
       [0, 4, 5, 6, 1, 1],
       [0, 1, 1, 1, 1, 1]])
# 第一个维度填充0, 第二个维度填充1

>>> np.pad(a, ((1, 1), (1, 2)), 'constant', constant_values=((0, 1), (2, 3)))
array([[2, 0, 0, 0, 3, 3],
       [2, 1, 2, 3, 3, 3],
       [2, 4, 5, 6, 3, 3],
       [2, 1, 1, 1, 3, 3]])
# 每个tuple表示前面填充的值和后面填充的值,列对应填充(0, 1), 行对应填充 (2, 3),这就解释的很清楚了

更多情况和参数设置,参考文档numpy.pad (官方文档)