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

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

  在卷积神经网络中,为了避免因为卷积运算导致输出图像缩小和图像边缘信息丢失,常常采用图像边缘填充技术,即在图像四周边缘填充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 nparr1D = 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 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 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 nparr1D = 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 nparr2D = 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]]

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

你可能感兴趣的文章
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>
Multicast1
查看>>
mysql client library_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...
查看>>
MySQL Cluster 7.0.36 发布
查看>>
Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
查看>>
MySQL Cluster与MGR集群实战
查看>>
multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
查看>>
mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
查看>>
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>