2017-04-21 25 views
2

什麼是寫入函數返回一個nxn邊界掩碼卷積的最pythonic方式,例如對於3x3它將返回[[1,1,1],[1,0,1],[1,1,1]],對於5x5它將返回[[1,1,1,1,1],[1,0,0,0,1],[1,0,0,0,1],[1,0,0,0,1],[1,1,1,1,1]]等等。優雅的方式來創建一個nxn邊界掩碼卷積在Python中

這工作(但心不是那麼Python的):

def boundaryMask(size): 
    mask=np.zeros((size,size)) 
    for i in range(size): 
     mask[0][i]=1 
     mask[i][0]=1 
     mask[i][size-1]=1 
     mask[size-1][i]=1 
    return mask 

回答

3

一個辦法是創造那些一個數組,然後使用切片分配零到陣列的中心:

N = 4 
x = np.ones((N, N)) 
x[1:-1, 1:-1] = 0 
x 
#array([[ 1., 1., 1., 1.], 
#  [ 1., 0., 0., 1.], 
#  [ 1., 0., 0., 1.], 
#  [ 1., 1., 1., 1.]]) 

加入功能並測試各種尺寸:

def boundaryMask(size): 
    mask=np.ones((size,size)) 
    mask[1:-1,1:-1] = 0 
    return mask 

boundaryMask(1) 
# array([[ 1.]]) 

boundaryMask(2) 
#array([[ 1., 1.], 
#  [ 1., 1.]]) 

boundaryMask(3) 
#array([[ 1., 1., 1.], 
#  [ 1., 0., 1.], 
#  [ 1., 1., 1.]]) 

boundaryMask(4) 
#array([[ 1., 1., 1., 1.], 
#  [ 1., 0., 0., 1.], 
#  [ 1., 0., 0., 1.], 
#  [ 1., 1., 1., 1.]])