GIS-LAB

Географические информационные системы и дистанционное зондирование

Быстрая обработка растровых массивов в Numpy

Максим Дубинин, 25.07.2010

В статьях “Работа с растрами при помощи GDAL и Python” и “Замена значений в растрах с помощью GDAL/Numpy“, приводится такой пример обработки данных растра попиксельно:

# перебираем все пиксели растра
for col in range( xsize ):
  for row in range( ysize ):
    # если значение пикселя равно inval, то меняем его на outval
    # иначе значение остается без изменений
    if raster[ row, col ] == inval:
      raster[ row, col ] = outval

Пример годный, но для больших растров очень медленный. Для подобных операций лучше использовать функции Numpy для обработки массивов.

Для сравнения:

Вышеприведенная обработка для растра размером 6000×6000 пикселей (36 миллионов) займет 528 секунд.

Ее аналог для обработки массивов будет выглядеть так:

temp1_bool = numpy.equal(raster,inval)
numpy.putmask(raster,temp1_bool,outval)

? для того же растра займет всего 2 секунды. Не слабая разница. Статьи и скрипт для замены значений обновлены.

Оставьте комментарий


(Геокруг)

Если Вы обнаружили на сайте ошибку, выберите фрагмент текста и нажмите Ctrl+Enter