2016-11-03 29 views
1

假设我有一个尺寸为(5,5)的2d numpy数组。我可以用下面的语句获取索引(i,j)的邻居: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的伟大工程。我的问题是,我总是希望得到一个3x3数组,但如果指标之一为0或4我不明白这一点(如果i=0范围为(-1, 2) = (4, 2),我们得到一个空范围)

你有什么想法我总是可以得到一个3x3矩阵并用“0”填充“失败的索引”?

回答

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]]) 
>>>