2012-02-03 3 views
2

Я пытаюсь проиндексировать соседи определенного элемента массива numpy. Например, если у меня есть массив, показанный ниже, и я проверяю элементы по определенному значению, как я могу эффективно индексировать ячейку выше, внизу, слева и справа от истинных элементов, не прибегая к циклам и т. Д.indexing numpy array соседи эффективно

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) 

ответ

2

Это даст вам показатели соседей:

>>> 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]]) 
Смежные вопросы