博客
关于我
python中numpy.pad()函数的使用
阅读量:571 次
发布时间:2019-03-10

本文共 3154 字,大约阅读时间需要 10 分钟。

在卷积神经网络(CNN)中,为了避免卷积运算导致的输出图像缩小以及图像边缘信息丢失,开发者通常采用图像边缘填充技术。这种技术的核心在于在图像的四周边缘填充0,从而确保卷积运算后图像尺寸不会发生变化,同时保留边缘和角落的信息。在Python中,numpy库提供了一个强大的工具 --- 序列操作库numpy,特别是numpy.pad()函数,可以用来实现图像的边缘填充。

numpy.pad()的作用

numpy.pad()是一种极其强大的工具,常用于数据预处理,特别是在深度学习中。它可以将numpy数组按照指定的模式充填到指定的形状。这种填充操作对于图片数据的预处理特别重要,因为它能够确保图片数据在卷积运算前后尺寸保持一致。

numpy.pad()的基本使用方法

numpy.pad()的函数调用语法如下:

ndarray = numpy.pad(array, pad_width, mode, **kwargs)
  • array:表示需要填充的numpy数组。
  • pad_width:在每个维度上添加的填充宽度。输入格式为 :((before_1, after_1), …, (before_N, after_N))。每个元组表示在某一维度前面和后面需要填充的长度。
  • mode:填充模式,共有11种选择。
  • kwargs:填充值,与pad_width对应。需要注意的是,对于不同的填充模式,参数解析可能会有所不同。

常见的填充模式

根据不同的填充需求,numpy.pad() 提供了11种填充模式:

  • constant:在数组边缘填充相同的常数值。在多维数组中,每一维都可以独立指定填充值,常用的填充值前后可以有不同的值,默认为0。
  • edge:使用边缘值填充。对于一维数组,默认使用数组的第一个和最后一个元素作为填充值。对于多维数组,默认使用整个数组的边缘值填充。
  • linear_ramp:从数组边缘递增或递减地填充。在填充区域,填充的值会随着离边缘的距离逐渐变化。
  • maximum:填充最大值。
  • mean:填充均值。
  • median:填充中位数值。
  • minimum:填充最小值。
  • reflect:镜像填充,即根据对称分布反射边缘值填充。
  • symmetric:对称填充,镜像对称填充数组。
  • wrap:使用数组元素的循环填充,即前面的元素重复在后面,后面的元素重复在前面。
  • 示例1:一维数组填充

    让我们通过一维数组的填充操作来理解不同填充模式的效果:

    import numpy as nparr1D = np.array([1, 1, 2, 2, 3, 3, 4, 4])"""不同填充模式"""print('constant: ', np.pad(arr1D, (1, 2), 'constant'))print('edge: ', np.pad(arr1D, (1, 2), 'edge'))print('linear_ramp: ', np.pad(arr1D, (1, 2), 'linear_ramp'))print('maximum: ', np.pad(arr1D, (1, 2), 'maximum'))print('mean: ', np.pad(arr1D, (1, 2), 'mean'))print('median: ', np.pad(arr1D, (1, 2), 'median'))print('minimum: ', np.pad(arr1D, (1, 2), 'minimum'))print('reflect: ', np.pad(arr1D, (1, 2), 'reflect'))print('symmetric: ', np.pad(arr1D, (1, 2), 'symmetric'))print('wrap: ', np.pad(arr1D, (1, 2), 'wrap'))

    多维数组填充示例

    对于多维数组,填充操作的实现方式与一维数组类似,不过需要指定每个维度的填充宽度和填充模式:

    import numpy as nparr3D = 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)

    constant填充模式是在数组边缘填充相同的常数值,默认填充0。多维数组的填充值可以在各维度上单独指定。在以下示例中,我们可以看到constant填充模式在不同维度上的实际效果。

    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]]

    常数填充模式(constant)二维数组

    对于多维数组,复合填充值的使用可以自定义不同维度的填充值。在以下示例中,每行前后填充不同的常数值:

    arr2D = np.array([[1, 1], [2, 2]])ndarray = np.pad(arr2D, ((1,1), (2,2)), 'constant', constant_values=(0, 3))

    运行结果

    运行以上代码后,我们可以看到不同的填充模式在实际操作中的表现。

    转载地址:http://omfvz.baihongyu.com/

    你可能感兴趣的文章
    Pandas 数据透视表:列顺序和小计
    查看>>
    pandas 时序统计的高级用法!
    查看>>
    pandas 时间序列重新采样结束给定的一天
    查看>>
    pandas 根据不是常量的第三列的值将值从一列复制到另一列
    查看>>
    pandas 根据值从多列中的一列查找
    查看>>
    Pandas 根据布尔条件选择行和列
    查看>>
    pandas 滚动窗口 - datetime64[ns] 未实现
    查看>>
    pandas 版本兼容特定的蟒蛇和NumPy配置吗?
    查看>>
    pandas 生成excel多级表头
    查看>>
    Pandas 的 DataFrame 详解-ChatGPT4o作答
    查看>>
    pandas 读取excel数据,以字典形式输出
    查看>>
    Pandas 读取具有浮点值的 csv 文件会导致奇怪的舍入和小数位数
    查看>>
    pandas 适用,但仅适用于满足条件的行
    查看>>
    pandas 重新采样到每月的特定工作日
    查看>>
    pandas :如何删除以NaN为列名的多个列?
    查看>>
    pandas :我如何对堆叠的条形图进行分组?
    查看>>
    pandas :按移位分组和累加和(GroupBy Shift And Cumulative Sum)
    查看>>
    pandas :检测一个DF和另一个DF之间缺失的列
    查看>>
    Pandas-从具有嵌套列表列表的现有列创建动态列时出错
    查看>>
    Pandas-通过对列和索引的值求和来合并两个数据框
    查看>>