2017-04-21 24 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.]])