1 np.pad()介绍
- 用法:将张量按照维度,以一定规则进行填充(通常是填边上)。
例如:
a = np.array([[1,2,3,4],[4,3,2,1]])
print(a)
b = np.pad(a, ((1,2),(3,3)))
print(b)
#输出:
[[1 2 3 4]
[4 3 2 1]]
[[0 0 0 0 0 0 0 0 0 0]
[0 0 0 1 2 3 4 0 0 0]
[0 0 0 4 3 2 1 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
- 参数:
第一个参数是待填充数组
第二个参数是填充的形状,(2,3)表示前面两个,后面三个;((0,0)(0,3)(0,0))表示第一维不填充,第二维末尾填充三个,第三维不填充
第三个参数是填充的方法
- 填充方法:
constant连续一样的值填充,有关于其填充值的参数。 constant_values=(x, y)时前面用x填充,后面用y填充。缺参数是为0000。。。
edge用边缘值填充
linear_ramp边缘递减的填充方式
maximum, mean, median, minimum分别用最大值、均值、中位数和最小值填充
reflect, symmetric都是对称填充。前一个是关于边缘对称,后一个是关于边缘外的空气对称╮(╯▽╰)╭
wrap用原数组后面的值填充前面,前面的值填充后面
2 应用:通常用于把张量某一维度补到定长(补0用的比较多)
例子:把大小为(2,2,3,2)的4维张量补成(2,2,10,2)多余的地方补0
import numpy as np
max_len = 10 # 最大长度为10
x = np.arange(24).reshape((2,2,3,2))
shape = x.shape #((2,2,3,2))
padded = max_len - shape[-2] #要填充的大小:7
padded_shape = ((0, 0),)*len(shape[:-2]) + ((0, padded), (0, 0))
#((0,0),(0,0),(0,padded),(0,0))
x = np.pad(x, padded_shape,mode="constant")