2016-11-03 13 views
1

私はサイズ(5,5)の2d numpy配列を持っているとしましょう。Numpyは3x3行列として常に隣人を得ます

a = range(25) 
a = np.reshape(a, (5,5)) 

n = a[i-1:i+2, j-1:j+2] 

0 < i,j < 4のための素晴らしい作品:私は、次のステートメントで(i、j)のインデックスの隣人を取得することができます。私の問題は、私はいつも3x3配列を取得したいということですが、指標の一つである場合は0または4、私はそれを得ることはありません

あなたがいずれかを持っていますか(場合i=0範囲が(-1, 2) = (4, 2)であり、我々は、空の範囲を取得します)どのように私はいつも3x3マトリックスを取得し、 "失敗したインデックス"をゼロで埋めることができますか?

答えて

3

np.padを使用して配列を最初に拡張し、代わりに結果にインデックスを付けます。それに応じてインデックスをシフトする必要があります。

>>> b = np.pad(a, pad_width=1, mode='constant') 
>>> b 
array([[ 0, 0, 0, 0, 0, 0, 0], 
     [ 0, 0, 1, 2, 3, 4, 0], 
     [ 0, 5, 6, 7, 8, 9, 0], 
     [ 0, 10, 11, 12, 13, 14, 0], 
     [ 0, 15, 16, 17, 18, 19, 0], 
     [ 0, 20, 21, 22, 23, 24, 0], 
     [ 0, 0, 0, 0, 0, 0, 0]]) 
>>> 
関連する問題