2016-11-05 54 views
1

我认为这应该很容易,但我不确定是否有效的方法。在numpy生成'接近中心'矩阵

我想在numpy中构建一个矩阵,该矩阵的城市街区/曼哈顿距离矩阵的中心很近,对于任何奇数大小都是numpy。

对于一个大小为5,输出将是:

array([[0, 1, 2, 1, 0], 
     [1, 2, 3, 2, 1], 
     [2, 3, 4, 3, 2], 
     [1, 2, 3, 2, 1], 
     [0, 1, 2, 1, 0]]) 

什么是这样做的最佳方式?由于

+0

我只是做编辑。我其实认为这只适用于奇怪的尺寸。谢谢 – Maximilian

+0

此外,似乎相关:http://stackoverflow.com/questions/40126853 – Divakar

回答

3

简单高效的与broadcasting -

def closeness_manhattan(N): 
    r = np.arange(N) 
    a = np.minimum(r,r[::-1]) 
    return a[:,None] + a 

样品试验 -

In [14]: closeness_manhattan(4) 
Out[14]: 
array([[0, 1, 1, 0], 
     [1, 2, 2, 1], 
     [1, 2, 2, 1], 
     [0, 1, 1, 0]]) 

In [15]: closeness_manhattan(5) 
Out[15]: 
array([[0, 1, 2, 1, 0], 
     [1, 2, 3, 2, 1], 
     [2, 3, 4, 3, 2], 
     [1, 2, 3, 2, 1], 
     [0, 1, 2, 1, 0]])