高效索引numpy数组邻居

2 投票
1 回答
3688 浏览
提问于 2025-04-17 12:16

我正在尝试对一个特定的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 个回答

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

撰写回答