pad函数

参考

官方文档:https://numpy.org/doc/stable/reference/generated/numpy.pad.html?highlight=pad#numpy.pad

numpy.pad(array, pad_width, mode='constant', **kwargs)

作用:填充数据

官方文档对pad_width的解释:
pad_width{sequence, array_like, int}
Number of values padded to the edges of each axis. ((before_1, after_1), … (before_N, after_N)) unique pad widths for each axis. ((before, after),) yields same before and after pad for each axis. (pad,) or int is a shortcut for before = after = pad width for all axes.

神经网络主要采用默认的constant模式,即常量填充

一维

import numpy as np
a = [1,2,3,4,5]
a = np.pad(a, (2, 3), 'constant', constant_values=(4, 6))
print(a)

结果为[4 4 1 2 3 4 5 6 6 6]
解释:

  • (2,3)(4,6)代码表示在前面充填2个4,最后面填充3个6

二维

import numpy as np

a = [[1,2],[3,4]]
a = np.pad(a, (2, 3), 'constant', constant_values=(0,5))
print(a,a.shape)

这是二维的,然后我们只使用了一个(2,3),所以二维数据的填充方法相同,都是前面2个0,后面3个5。先看第一维(行),前面填充2行0,后面填充3行5,结果如下
pad函数
然后看第二维(列),依然是前面2列0,后面3列5,结果如下
pad函数
接下来我们将二维填充不同的大小和数据

import numpy as np

a = [[1,2],[3,4]]
a = np.pad(a, ((2, 3),(4,5)), 'constant', constant_values=((0,6),(1,8)))
print(a,a.shape)

则上面的代码是将第1维(行),填充2行0和3行6,第二维(列),填充4列1和5列8。结果如下(红色和蓝色分别表示第1维和第2维填充)
pad函数

三维

最后一项看看对于我们的神经网络需要的图片格式如何扩充数据。

import numpy as np

a = np.ones((2, 3, 3))
print(a)
a = np.pad(a, ((0,0),(2, 2),(2, 2)), constant_values=0)
print(a)

首先使用np.ones((2, 3, 3))创建一个2通道,长和宽都为3的全1的数据。对于第1维(通道维度)我们是不需要扩充的,因此将它的前后填充都设置为0,我们需要将长和宽的前后各扩展两行/列,值为0,则参数皆为(2,2)。最后a的规格也从(2, 3, 3)变为(2, 7, 7),运行结果如下
pad函数

上一篇:ROOT学习——显示二位直方图及其对X、Y坐标的投影(h2proj.C)


下一篇:记主控 i2c 无信号输出(linux)