2012-02-03 79 views
2

我想索引一個特定的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) 

回答

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