什么是编写返回 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]]
等等。
这有效(但不是那么 pythonic):
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
一个选择是创建一个ones数组,然后使用切片将零分配到数组的中心:
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.]])
我是一名优秀的程序员,十分优秀!