k-соседей данной матрицы M x N

Я пытаюсь написать код, который, учитывая положение (x, y) матрицы целых чисел, я мог бы перебирать всех соседей (слева, справа, вверх, вниз и по диагонали) на расстоянии K следующим образом:

K = 1

01 02 03 04 05 06
07 08 09 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30

for i in range(M):
for j in range(N):
for ... #loop that i am writing... <br/>
#for (0,0) is [(0,0), (0,1), (1,0), (1, 1)]
#for (3, 3) is [(2,2), (2,3), (2,4), (3,2), (3,3), (3,4), (4,2), (4,3), (4,4)

Таким образом, для всех позиций в матрице.

Любой совет или код?


person richardaum    schedule 20.01.2014    source источник
comment
Да, +k и -k к индексам   -  person StoryTeller - Unslander Monica    schedule 20.01.2014


Ответы (1)


Нарезка Numpy сделает это довольно легко

>>> import numpy as np
>>> a = np.array(range(25)).reshape((5,5))
>>> print a
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
>>> k = 1
>>> a[2, 3]
13
>>> a[2-k:2+k+1, 3-k:3+k+1]

array([[ 7,  8,  9],
       [12, 13, 14],
       [17, 18, 19]])

Будьте осторожны с пограничными случаями, когда индекс -1 переносится на другую сторону массива.

person wim    schedule 20.01.2014