Python 高效索引numpy数组邻居
我正在尝试为特定numpy数组项的邻居建立索引。例如,如果我有如下所示的数组,并且我检查了超过某个值的项,那么我如何在不使用循环等的情况下有效地为真项的上、下、左、右单元格建立索引Python 高效索引numpy数组邻居,python,numpy,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.,
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)
这将为您提供邻居的索引:
>>> 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]])