Python中numpy.pad()函数的使用详解
numpy.pad()函数的使用
在卷积神经网络中,为了避免因为卷积运算导致输出图像缩小和图像边缘信息丢失,常常采用图像边缘填充技术,即在图像四周边缘填充0,使得卷积运算后图像大小不会缩小,同时也不会丢失边缘和角落的信息。在Python的numpy库中,常常采用numpy.pad()进行填充操作。
numpy.pad() 常用于深度学习中的数据预处理,可以将numpy数组按指定的方法填充成指定的形状。
语法结构
ndarray = numpy.pad(array, pad_width, mode, **kwargs)
- array表示需要填充的数组;
- pad_width表示在各维度的各个方向上想要填补的长度。参数输入方式为: ((before_1, after_1), … (before_N, after_N));
- mode表示填充的方式,总共有11种填充模式;
- **kwargs表示填充的值,与pad_width相对应。
填充模式
- constant表示连续填充相同的值,每个维度可以分别指定填充值,constant_values=(x, y)时前面用x填充,后面用y填充,缺省值填充0;
- edge表示用边缘值填充;
- linear_ramp表示用边缘递减的方式填充;
- maximum表示最大值填充;
- mean表示均值填充;
- median表示中位数填充;
- minimum表示最小值填充;
- reflect表示对称填充;
- symmetric表示对称填充;
- wrap表示用原数组后面的值填充前面,前面的值填充后面。
示例
examples1: 用不同的填充模式对一维数组进行填充:
import numpy as np arr1D = np.array([1, 1, 2, 2, 3, 3, 4, 4]) '''不同的填充模式''' print('constant: ' + str(np.pad(arr1D, (1, 2), 'constant'))) print('edge: ' + str(np.pad(arr1D, (1, 2), 'edge'))) print('linear_ramp: ' + str(np.pad(arr1D, (1, 2), 'linear_ramp'))) print('maximum: ' + str(np.pad(arr1D, (1, 2), 'maximum'))) print('mean: ' + str(np.pad(arr1D, (1, 2), 'mean'))) print('median: ' + str(np.pad(arr1D, (1, 2), 'median'))) print('minimum: ' + str(np.pad(arr1D, (1, 2), 'minimum'))) print('reflect: ' + str(np.pad(arr1D, (1, 2), 'reflect'))) print('symmetric: ' + str(np.pad(arr1D, (1, 2), 'symmetric'))) print('wrap: ' + str(np.pad(arr1D, (1, 2), 'wrap')))
不同模式填充结果:
constant: [0 1 1 2 2 3 3 4 4 0 0]
edge: [1 1 1 2 2 3 3 4 4 4 4]
linear_ramp: [0 1 1 2 2 3 3 4 4 2 0]
maximum: [4 1 1 2 2 3 3 4 4 4 4]
mean: [2 1 1 2 2 3 3 4 4 2 2]
median: [2 1 1 2 2 3 3 4 4 2 2]
minimum: [1 1 1 2 2 3 3 4 4 1 1]
reflect: [1 1 1 2 2 3 3 4 4 4 3]
symmetric: [1 1 1 2 2 3 3 4 4 4 4]
wrap: [4 1 1 2 2 3 3 4 4 1 1]
examples2: 用不同的填充模式对多维数组进行填充:
import numpy as np 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]]]) '''不同的填充模式''' print('constant: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'constant'))) print('edge: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'edge'))) print('linear_ramp: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'linear_ramp'))) print('maximum: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'maximum'))) print('mean: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'mean'))) print('median: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'median'))) print('minimum: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'minimum'))) print('reflect: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'reflect'))) print('symmetric: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'symmetric'))) print('wrap: \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'wrap')))
constant填充模式的结果如下(其他模式的运行结果省略):
[[[0 0 0 0 0 0 0 0 0 0]
[0 0 1 1 2 2 3 3 0 0]
[0 0 1 1 2 2 3 3 0 0]
[0 0 1 1 2 2 3 3 0 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 4 5 0 0]
[0 0 0 1 2 3 4 5 0 0]
[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 0 0 0 0]
[0 0 4 4 5 5 6 6 0 0]
[0 0 4 4 5 5 6 6 0 0]
[0 0 4 4 5 5 6 6 0 0]
[0 0 0 0 0 0 0 0 0 0]]]
examples3: 使用constant填充模式对一维数组填充。
import numpy as np arr1D = np.array([1, 2, 3]) ndarray=np.pad(arr1D,(1,2),'constant', constant_values=(0,2)) # (1,2)表示在一维数组array前面填充1位,最后面填充2位 # constant_values=(0,2) 表示前面填充0,后面填充2 print("arr1D=",arr1D) print("ndarray=",ndarray)
运行结果:
arr1D= [1 2 3]
ndarray= [0 1 2 3 2 2]
examples4: 使用constant填充模式对多维数组填充。
import numpy as np arr2D = np.array([[1, 1],[2,2]]) """ ((1,1),(2,2))表示在二维数组array第一维(此处便是行)前面填充1行,最后面填充1行; 在二维数组array第二维(此处便是列)前面填充2列,最后面填充2列 constant_values=(0,3) 表示第一维填充0,第二维填充3 """ ndarray=np.pad(arr2D,((1,1),(2,2)),'constant', constant_values=(0,3)) print("arr2D=",arr2D) print("ndarray=",ndarray)
运行结果:
arr2D= [[1 1]
[2 2]]
ndarray= [[0 0 0 0 3 3]
[0 0 1 1 3 3]
[0 0 2 2 3 3]
[0 0 3 3 3 3]]
到此这篇关于Python中numpy.pad()函数的使用详解的文章就介绍到这了,更多相关numpy.pad()函数的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
使用Python将数组的元素导出到变量中(unpacking)
最近工作中遇到一个问题,需要利用Python将数组(list)或元组(tuple)中的元素导出到N个变量中,现在将我实现的方法分享给大家,有需要的朋友们可以参考借鉴,下面来一起看看吧。2016-10-10如何用 Python 子进程关闭 Excel 自动化中的弹窗
这篇文章主要介绍了如何用 Python 子进程关闭 Excel 自动化中的弹窗,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下2021-05-05python-opencv获取二值图像轮廓及中心点坐标的代码
今天小编就为大家分享一篇python-opencv获取二值图像轮廓及中心点坐标的代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-08-08Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
这篇文章主要介绍了Request爬取网站(seo.chinaz.com)百度权重的查询结果过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-08-08
最新评论