2016-11-05 3 views
1

これは簡単だと思いますが、効率的な方法はわかりません。numpyで「中心に近似」行列を生成

私はnumpyで行列を構築したいと思っています。これは、行列の中心にcityblock/manhattanの近さがあり、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]]) 
関連する問題