Python中numpy.pad()函数的使用详解

 更新时间:2023年10月30日 10:07:40   作者:大彤小忆  
这篇文章主要介绍了Python中numpy.pad()函数的使用详解,在卷积神经网络中,为了避免卷积运算导致输出图像缩小和图像边缘信息丢失,常常采用图像边缘填充技术,即在图像四周边缘填充0,使得卷积运算后图像大小不会缩小,同时也不会丢失边缘和角落的信息,需要的朋友可以参考下

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实现图像去雾效果的示例代码

    Python实现图像去雾效果的示例代码

    本文将利用《bringing old photos back to life》 的开源代码,并在此基础上进行修改,从而实现图像去雾的效果,感兴趣的小伙伴可以学习一下
    2022-02-02
  • Python中if语句的使用方法及实例代码

    Python中if语句的使用方法及实例代码

    if语句能够进行条件测试,并依据一定的条件进行具体的操作,下面这篇文章主要给大家介绍了关于Python中if语句的使用方法及实例代码,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Python图像处理Pillow库的基础使用

    Python图像处理Pillow库的基础使用

    Pillow库是Python中最流行的图像处理库之一,它是PIL(Python Imaging Library)的一个分支,提供了丰富的图像处理功能,使图像处理变得简单而高效,在这篇文章中,我们将探讨Pillow库的一些基本功能,感兴趣的朋友可以参考下
    2023-09-09
  • Python编写一个代码规范自动检查工具

    Python编写一个代码规范自动检查工具

    在Python开发中,代码规范对于项目的可维护性和团队协作效率至关重要,本文介绍一个基于AST的Python import语句位置自动检查与修复工具,希望对大家有所帮助
    2025-10-10
  • Appium自动化测试实现H5页面元素定位

    Appium自动化测试实现H5页面元素定位

    本文主要介绍了Appium自动化测试实现H5页面元素定位,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • python getpass实现密文实例详解

    python getpass实现密文实例详解

    这篇文章主要介绍了python getpass实现密文实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python人脸检测实战之疲劳检测

    Python人脸检测实战之疲劳检测

    本文主要介绍了实现疲劳检测:如果眼睛已经闭上了一段时间,我们会认为他们开始打瞌睡并发出警报来唤醒他们并引起他们的注意。感兴趣的朋友可以了解一下
    2021-12-12
  • python使用cartopy在地图中添加经纬线的示例代码

    python使用cartopy在地图中添加经纬线的示例代码

    gridlines可以根据坐标系,自动绘制网格线,这对于普通绘图来说显然不必单独拿出来说说,但在地图中,经纬线几乎是必不可少的,本文将给大家介绍了python使用cartopy在地图中添加经纬线的方法,需要的朋友可以参考下
    2024-01-01
  • Python图像处理之图像的缩放、旋转与翻转实现方法示例

    Python图像处理之图像的缩放、旋转与翻转实现方法示例

    这篇文章主要介绍了Python图像处理之图像的缩放、旋转与翻转实现方法,结合实例形式分析了Python使用resize()、rotate()及transpose()等函数进行图像的缩放、旋转及翻转相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Python内置函数object的具体使用

    Python内置函数object的具体使用

    Python内置函数object是Python中最基础的类,它是所有类的基类,在 Python 中,所有的类都直接或间接地继承自object类,object类提供了一些默认的方法和属性,这些方法和属性可以被所有 Python 对象使用,
    2025-07-07

最新评论