有效地索引numpy数组邻居

时间:2012-02-03 16:39:34

标签: python numpy

我正在尝试索引特定numpy数组项的邻居。例如,如果我有下面显示的数组,并检查超过某个值的项目,我如何以有效的方式索引真实项目的上方,下方,左侧和右侧的单元格,而无需求助于循环等。

In [34]: x
Out[34]: 
array([[ 10.,  10.,  10.,  10.,  10.],
   [ 10.,  10.,  10.,  10.,  10.],
   [ 10.,  20.,  10.,  10.,  10.],
   [ 10.,  10.,  10.,  20.,  10.],
   [ 10.,  10.,  10.,  10.,  10.]])

In [37]: ans = x > 10

In [38]: ans
Out[38]: 
array([[False, False, False, False, False],
   [False, False, False, False, False],
   [False,  True, False, False, False],
   [False, False, False,  True, False],
   [False, False, False, False, False]], dtype=bool)

1 个答案:

答案 0 :(得分:3)

这将为您提供邻居的索引:

>>> def neighbors(x, y):
...    return np.array([(x-1, y), (x, y-1), (x+1, y), (x, y+1)])
...
>>> ind = zip(*np.where(x > 10))
>>> neighb = np.concatenate([neighbors(*i) for i in ind])
array([[1, 1],
       [2, 0],
       [3, 1],
       [2, 2],
       [2, 3],
       [3, 2],
       [4, 3],
       [3, 4]])