1. 程式人生 > >np.random.rand()函式與陣列填充np.pad()

np.random.rand()函式與陣列填充np.pad()

np.random.rand(d0,d1,d2……dn)

注:使用方法與np.random.randn()函式相同 ,但rand返回的是均勻分佈的樣本值,randn返回的是正態分佈的樣本值
作用:
通過本函式可以返回一個或一組服從“0~1”均勻分佈的隨機樣本值。隨機樣本取值範圍是[0,1),不包括1。
1)當函式括號內沒有引數時,則返回一個浮點數;
2)當函式括號內有一個引數時,則返回秩為1的陣列,不能表示向量和矩陣;
3)當函式括號內有兩個及以上引數時,則返回對應維度的陣列,能表示向量或矩陣;

import numpy as np
np.random.seed(1)
np.random.rand()  #0.417022004702574
np.random.rand(1) #array([0.417022])
np.random.rand(2) #array([0.417022  , 0.72032449])
np.random.rand(3) #array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04])
np.random.rand(3,1) #array([[4.17022005e-01],
      					 	 [7.20324493e-01],
      						 [1.14374817e-04]])
      				#3*1的矩陣
np.random.rand(3,3) #array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04],
       						[3.02332573e-01, 1.46755891e-01, 9.23385948e-02],
       						[1.86260211e-01, 3.45560727e-01, 3.96767474e-01]])
np.random.rand(4,3,2) 
#array([[[4.17022005e-01, 7.20324493e-01],
        [1.14374817e-04, 3.02332573e-01],
        [1.46755891e-01, 9.23385948e-02]],

       [[1.86260211e-01, 3.45560727e-01],
        [3.96767474e-01, 5.38816734e-01],
        [4.19194514e-01, 6.85219500e-01]],

       [[2.04452250e-01, 8.78117436e-01],
        [2.73875932e-02, 6.70467510e-01],
        [4.17304802e-01, 5.58689828e-01]],

       [[1.40386939e-01, 1.98101489e-01],
        [8.00744569e-01, 9.68261576e-01],
        [3.13424178e-01, 6.92322616e-01]]])
       #4*3*2的矩陣。如一個3,2大小的4通道圖, 注意最前面是通道數。

np.pad()

用於填充np陣列。在深度學習時為了卷積時矩陣大小不會一直變小,且邊緣的元素不會被忽視,通常需要在原矩陣的周圍填充0。
pad第一個引數為待填充的陣列。中間引數為需要填充的形狀,(2,2)表示陣列前填充2個,後面2個。多維陣列則需要有多個。比如3維陣列,最後一維(圖的depth)不需要填充,則((2,2),(2,2),(0,0)),最後一個引數為填充的方法。'constant’連續一樣的值填充,有關於其填充值的引數。constant_values=(x, y)時前面用x填充,後面用y填充。缺引數是為0000。。。

import numpy as np
np.random.seed(1)
A=np.random.rand(4,3,2)# 4*3的圖,2通道。
np.pad(A, ((1,1),(1,1),(0,0)),'constant')

注:雖然輸出時跟理解上的矩陣不一樣, 但一般都是生成np.random.randn(m, nH, nW, nC)這樣的順序。pad時也是中間兩個維度需要Pad。兩邊都為(0,0)