2014-02-18 6 views
1

В приложении для обработки изображений, которое я пишу, у меня есть многомерный список, data, и мне нужно иметь доступ к диапазону точек (скажем, блок 2x2) сразу ,Более короткий способ манипулировать областью двумерного списка

В настоящее время я использую это:

data[x, y] = average 

data[x+1, y] = average 

data[x, y+1] = average 

data[x+1, y+1] = average 

Но это неуклюжим, и если бы я хотел, чтобы расширить к блоку 4x4 или 8x8 это займет 16 или 64 строк кода соответственно.

Должен быть более простой, питонический способ манипулирования областями двумерного списка, любые идеи?

+1

Если у вас есть список, 'данные [x, y] 'не должно работать. Вы используете numpy 'ndarray' вместо этого? – DSM

ответ

2

Для фактического 2D списка, перебирает индексы, которые вы хотите использовать:

for x in xrange(low_x, low_x+2): 
    for y in xrange(low_y, low_y+2): 
     data[x][y] = average 

Для массива NumPy используйте назначение ломтика:

data[x:x+2, y:y+2] = average 
+0

Спасибо, я использую PIL и не понимаю, что это массив NumPy - d'oh! –

+0

Я буду принимать ответ, как только смогу - через 2 минуты –