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 = \n", aa) 16 17 bb = np.pad(aa, (2, 4), 'constant') 18 print("bb = \n", bb) 19 20 cc = np.pad(aa, ((2, 4), (3, 5)), 'constant') 21 print("cc = \n", cc) 22 23 24 # 測試三維數組 25 aaa = np.arange(24).reshape(2, 3, 4) 26 print("aaa = \n", 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 = \n", 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM