zoukankan      html  css  js  c++  java
  • np.pad()详解

    np.pad()用来在numpy数组的边缘进行数值填充,例如CNN网络常用的padding操作

    1.语法结构

    np.pad(array,pad_width,mode,**kwargs)  # 返回填充后的numpy数组

    array:要填充的numpy数组【要对谁进行填充】

    pad_width:每个轴要填充的数据的数目【每个维度前、后各要填充多少个数据】

    mode:填充的方式【采用哪种方式填充】

    备注:如何理解轴的概念?

    轴是指行/列的堆叠方向

     

    2. 参数pad_width解析

    pad_width参数类型:sequence,array_like,int

    pad_width参数格式:((before_1, after_1), (before_2, after_2), ... , (before_N, after_N))

    第一个元素(before_1, after_1)表示第一维【列】的填充方式:前面填充before_1个数值,后面填充after_1个数值

    第2个元素(before_2, after_2)表示第二维【行】的填充方式:前面填充before_2个数值,后面填充after_2个数值

    ... ...

    备注:

    (1)一维数组的rank = 1,所以对一维数组填充时,其pad_width参数只能是一个元组(before_1, after_1),当然也可以是一个int类型,表示前后填充的数值个数相同,例如

    a = np.array([1, 2, 3, 4, 5])

    b = np.pad(a, 2, 'constant')  # 正确写法

    c = np.pad(a, (2, 4), 'constant')  # 正确写法

    d = np.pad(a, ((2, 4), (3, 5)), 'constant')  # 错误写法,因为a是一维数组,而(3, 5)表示在第二个维度进行填充

    (2)二维数组的rank = 2,因此对二维数组填充时,其pad_width参数可以是两个并列的元组((before_1, after_1), (before_2, after_2)),但要注意将其合并为一个整体(即外加括号变成一个大元组)一起进行传参,

    当然也可以是一个元组(before, after),表示两个维度都按照此方式填充;

    当然也可以是一个int类型,表示两个维度前后填充的个数都相同;

    例如

    aa = np.arange(6).reshape(2, 3)

    bb = np.pad(aa, 2, 'constant')  # 正确写法

    cc = np.pad(aa, (2, 4), 'constant')  # 正确写法

    dd = np.pad(aa, ((2, 4), (3, 5)), 'constant')  # 正确写法

    ee = np.pad(aa, (2, 4), (3, 5), 'constant')  # 错误写法,必须将两个元组合成一个大元组传参

    3.参数mode解析

    mode参数类型:str(10种取值)、function

    str类型取值包括:

    • ‘constant’——表示连续填充相同的值,每个轴可以分别指定填充值,constant_values=(x, y)时前面用x填充,后面用y填充,缺省值填充0
    • ‘edge’——表示用边缘值填充
    • ‘linear_ramp’——表示用边缘递减的方式填充
    • ‘maximum’——表示最大值填充
    • ‘mean’——表示均值填充
    • ‘median’——表示中位数填充
    • ‘minimum’——表示最小值填充
    • ‘reflect’——表示对称填充
    • ‘symmetric’——表示对称填充
    • ‘wrap’——表示用原数组后面的值填充前面,前面的值填充后面

    4.参数kwargs解析

    字典类型,key包括:

    stat_length:sequence、int、optional,用在"maximum", "mean", "median", "minimum"中,默认值是 None

    constant_values:sequence、int、optional,用在"constant"中,默认值是 0

    end_values:sequence、int、optional,用在"linear_ramp"中,默认值是 0

    reflect_type:{'even', 'old'},用在"reflect","symmetric"中

    5.代码测试

     1 import numpy as np
     2 
     3 # 测试一维数组
     4 a = np.array([1, 2, 3, 4, 5])
     5 
     6 b = np.pad(a, 2, 'constant')
     7 print("b = ", b)
     8 
     9 c = np.pad(a, (2, 4), 'constant')
    10 print("c = ", c)
    11 
    12 
    13 # 测试二维数组
    14 aa = np.arange(6).reshape(2, 3)
    15 print("aa = 
    ", aa)
    16 
    17 bb = np.pad(aa, (2, 4), 'constant')
    18 print("bb = 
    ", bb)
    19 
    20 cc = np.pad(aa, ((2, 4), (3, 5)), 'constant')
    21 print("cc = 
    ", cc)
    22 
    23 
    24 # 测试三维数组
    25 aaa = np.arange(24).reshape(2, 3, 4)
    26 print("aaa = 
    ", aaa)
    27 
    28 np.set_printoptions(threshold=np.inf) # 将numpy数组完全展开
    29 bbb = np.pad(aaa, ((2, 3), (4, 5), (6, 7)), 'constant')# 块上加了2/3,列上加了4/5,行上加了6/7
    30 print("bbb = 
    ", bbb)

    运行结果如下:

    b =  [0 0 1 2 3 4 5 0 0]
    c =  [0 0 1 2 3 4 5 0 0 0 0]
    aa = 
     [[0 1 2]
     [3 4 5]]
    bb = 
     [[0 0 0 0 0 0 0 0 0]
     [0 0 0 0 0 0 0 0 0]
     [0 0 0 1 2 0 0 0 0]
     [0 0 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 0 0 0 0 0 0 0]
     [0 0 0 0 0 0 0 0 0]]
    cc = 
     [[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 0 1 2 0 0 0 0 0]
     [0 0 0 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 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]]
    aaa = 
     [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]
    
     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]
    bbb = 
     [[[ 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  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  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  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  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  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  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  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  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  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  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  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  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  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  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  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  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]
      [ 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  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  0]
      [ 0  0  0  0  0  0  0  1  2  3  0  0  0  0  0  0  0]
      [ 0  0  0  0  0  0  4  5  6  7  0  0  0  0  0  0  0]
      [ 0  0  0  0  0  0  8  9 10 11  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  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  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]
      [ 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  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  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  0  0  0  0  0  0  0  0  0  0]
      [ 0  0  0  0  0  0 12 13 14 15  0  0  0  0  0  0  0]
      [ 0  0  0  0  0  0 16 17 18 19  0  0  0  0  0  0  0]
      [ 0  0  0  0  0  0 20 21 22 23  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  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  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]
      [ 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  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  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  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  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  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  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  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  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  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  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  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  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  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  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  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  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]]
    
     [[ 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  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  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  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  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  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  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  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  0  0  0  0]]]

    转载请注明博客出处:https://www.cnblogs.com/shuaishuaidefeizhu/p/14179038.html

  • 相关阅读:
    java例程练习(简单的画图程序[鼠标事件处理])
    java例程练习(事件监听机制)
    java例程练习(布局管理器[FlowLayout])
    java例程练习(网络编程[简单UDP通信试验])
    java例程练习(BorderLayou&GridLayout)
    java例程练习(关于内部类的一个非常重要的作用)
    java例程练习(Graphics类[paint()方法])
    java例程练习(TextField)
    Service Broker 常见问题
    ubuntu8.04 和 Fedora 9
  • 原文地址:https://www.cnblogs.com/shuaishuaidefeizhu/p/14179038.html
Copyright © 2011-2022 走看看