np.pad()详解
np.pad()用来在numpy数组的边缘进行数值填充,例如CNN网络常用的padding操作
1.语法结构
np.pad(array,pad_width,mode,**kwargs) # 返回填充后的numpy数组
array:要填充的numpy数组【要对谁进行填充】
pad_width:每个轴要填充的数据的数目【每个维度前、后各要填充多少个数据】
mode:填充的方式【采用哪种方式填充】
备注:如何理解轴的概念?
轴是指行/列的堆叠方向
2. 参数pad_width解析
pad_width参数类型:sequence,array_like,int
pad_width参数格式:((before_1, after_1), (before_2, after_2), ... , (before_N, after_N))
第一个元素(before_1, after_1)表示第一维【列】的填充方式:前面填充before_1个数值,后面填充after_1个数值
第2个元素(before_2, after_2)表示第二维【行】的填充方式:前面填充before_2个数值,后面填充after_2个数值
... ...
备注:
(1)一维数组的rank = 1,所以对一维数组填充时,其pad_width参数只能是一个元组(before_1, after_1),当然也可以是一个int类型,表示前后填充的数值个数相同,例如
a = np.array([1, 2, 3, 4, 5])
b = np.pad(a, 2, 'constant') # 正确写法
c = np.pad(a, (2, 4), 'constant') # 正确写法
d = np.pad(a, ((2, 4), (3, 5)), 'constant') # 错误写法,因为a是一维数组,而(3, 5)表示在第二个维度进行填充
(2)二维数组的rank = 2,因此对二维数组填充时,其pad_width参数可以是两个并列的元组((before_1, after_1), (before_2, after_2)),但要注意将其合并为一个整体(即外加括号变成一个大元组)一起进行传参,
当然也可以是一个元组(before, after),表示两个维度都按照此方式填充;
当然也可以是一个int类型,表示两个维度前后填充的个数都相同;
例如
aa = np.arange(6).reshape(2, 3)
bb = np.pad(aa, 2, 'constant') # 正确写法
cc = np.pad(aa, (2, 4), 'constant') # 正确写法
dd = np.pad(aa, ((2, 4), (3, 5)), 'constant') # 正确写法
ee = np.pad(aa, (2, 4), (3, 5), 'constant') # 错误写法,必须将两个元组合成一个大元组传参
3.参数mode解析
mode参数类型:str(10种取值)、function
str类型取值包括:
- ‘constant’——表示连续填充相同的值,每个轴可以分别指定填充值,constant_values=(x, y)时前面用x填充,后面用y填充,缺省值填充0
- ‘edge’——表示用边缘值填充
- ‘linear_ramp’——表示用边缘递减的方式填充
- ‘maximum’——表示最大值填充
- ‘mean’——表示均值填充
- ‘median’——表示中位数填充
- ‘minimum’——表示最小值填充
- ‘reflect’——表示对称填充
- ‘symmetric’——表示对称填充
- ‘wrap’——表示用原数组后面的值填充前面,前面的值填充后面
4.参数kwargs解析
字典类型,key包括:
stat_length:sequence、int、optional,用在"maximum", "mean", "median", "minimum"中,默认值是 None
constant_values:sequence、int、optional,用在"constant"中,默认值是 0
end_values:sequence、int、optional,用在"linear_ramp"中,默认值是 0
reflect_type:{'even', 'old'},用在"reflect","symmetric"中
5.代码测试
1 import numpy as np
2
3 # 测试一维数组
4 a = np.array([1, 2, 3, 4, 5])
5
6 b = np.pad(a, 2, 'constant')
7 print("b = ", b)
8
9 c = np.pad(a, (2, 4), 'constant')
10 print("c = ", c)
11
12
13 # 测试二维数组
14 aa = np.arange(6).reshape(2, 3)
15 print("aa = \n", aa)
16
17 bb = np.pad(aa, (2, 4), 'constant')
18 print("bb = \n", bb)
19
20 cc = np.pad(aa, ((2, 4), (3, 5)), 'constant')
21 print("cc = \n", cc)
22
23
24 # 测试三维数组
25 aaa = np.arange(24).reshape(2, 3, 4)
26 print("aaa = \n", aaa)
27
28 np.set_printoptions(threshold=np.inf) # 将numpy数组完全展开
29 bbb = np.pad(aaa, ((2, 3), (4, 5), (6, 7)), 'constant')# 块上加了2/3,列上加了4/5,行上加了6/7
30 print("bbb = \n", bbb)
运行结果如下:
b = [0 0 1 2 3 4 5 0 0] c = [0 0 1 2 3 4 5 0 0 0 0] aa = [[0 1 2] [3 4 5]] bb = [[0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0] [0 0 0 1 2 0 0 0 0] [0 0 3 4 5 0 0 0 0] [0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0]] cc = [[0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 1 2 0 0 0 0 0] [0 0 0 3 4 5 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0]] aaa = [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] bbb = [[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]] [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]] [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 1 2 3 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 4 5 6 7 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 8 9 10 11 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]] [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 12 13 14 15 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 16 17 18 19 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 20 21 22 23 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]] [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]] [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]] [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]]
转载请注明博客出处:https://www.cnblogs.com/shuaishuaidefeizhu/p/14179038.html