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

本文共 3192 字,大约阅读时间需要 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 np
    arr1D = 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 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)

    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/

    你可能感兴趣的文章
    node.js安装方法
    查看>>
    Node.js官网无法正常访问时安装NodeJS的方法
    查看>>
    Node.js的循环与异步问题
    查看>>
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>
    NodeJS @kubernetes/client-node连接到kubernetes集群的方法
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs http小爬虫
    查看>>
    nodejs libararies
    查看>>
    nodejs npm常用命令
    查看>>
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>
    nodejs 的 Buffer 详解
    查看>>
    nodejs 读取xlsx文件内容
    查看>>
    nodejs 运行CMD命令
    查看>>
    nodejs+nginx获取真实ip
    查看>>
    nodejs-mime类型
    查看>>
    NodeJs——(11)控制权转移next
    查看>>
    NodeJS、NPM安装配置步骤(windows版本)
    查看>>
    NodeJS、NPM安装配置步骤(windows版本)
    查看>>