Как я могу использовать массивы NumPy для оптимизации геообработки больших данных?

16

Мне интересно узнать, как использовать массивы NumPy для оптимизации геообработки. Большая часть моей работы связана с «большими данными», где для геообработки часто требуются дни для выполнения определенных задач. Излишне говорить, что я очень заинтересован в оптимизации этих процедур. ArcGIS 10.1 имеет ряд функций NumPy, к которым можно получить доступ через arcpy, включая:

  1. NumPyArrayToFeatureClass (arcpy.da)
  2. RasterToNumPyArray (arcpy)
  3. TableToNumPyArray (arcpy.da)

Например, скажем, я хочу оптимизировать следующий интенсивный процесс обработки с использованием массивов NumPy:

введите описание изображения здесь

Общая идея здесь заключается в том, что существует огромное количество векторных точек, которые перемещаются как по векторным, так и по растровым операциям, что приводит к получению двоичного целочисленного набора растровых данных.

Как я могу включить массивы NumPy для оптимизации этого типа рабочего процесса?

Аарон
источник
2
Кстати, есть также функция NumPyArrayToRaster и функция FeatureClassToNumPyArray .
blah238
2
В блоге Multiprocessing with ArcGIS есть полезная информация, которую можно применить здесь. Вы также можете быть заинтересованы в других многопроцессорных вопросах .
blah238
3
Мне кажется, что прежде чем подумать об использовании Numpy в ArcPy, вам сначала необходимо понять, какие преимущества дают массивы NumPy по сравнению со списками Python. Область применения Numpy намного шире, чем ArcGIS.
ген
2
@gene, этот ответ StackOverflow, кажется, суммирует это довольно хорошо.
blah238
3
Кроме того, если вы также заинтересованы в Hadoop - есть разработки больших (пространственных) данных, которые стоит
посмотреть

Ответы:

3

Я думаю, суть вопроса здесь в том, какие задачи в вашем рабочем процессе на самом деле не зависят от ArcGIS? Очевидные кандидаты включают табличные и растровые операции. Если данные должны начинаться и заканчиваться в GDB или каком-либо другом формате ESRI, то вам необходимо выяснить, как минимизировать стоимость этого переформатирования (т. Е. Минимизировать количество циклов) или даже оправдать его - просто может быть слишком рационализировать дорого. Другая тактика заключается в том, чтобы модифицировать ваш рабочий процесс для более раннего использования удобных для Python моделей данных (например, как скоро вы можете отказаться от векторных полигонов?).

Чтобы повторить @gene, хотя numpy / scipy действительно хороши, не думайте, что это единственные доступные подходы. Вы также можете использовать списки, наборы, словари в качестве альтернативных структур (хотя ссылка @ blah238 довольно ясно говорит о различиях в эффективности), есть также генераторы, итераторы и все другие отличные, быстрые и эффективные инструменты для работы с этими структурами в python. Raymond Hettinger, один из разработчиков Python, имеет все виды отличного общего Python-контента. Это видео является хорошим примером .

Кроме того, чтобы добавить идею @ blah238 о мультиплексной обработке, если вы пишете / выполняете в IPython (а не только в «обычной» среде Python), вы можете использовать их «параллельный» пакет для эксплуатации нескольких ядер. Я не одарён этим, но нахожу его более удобным для новичков, чем мультипроцессорный. Вероятно, на самом деле это просто вопрос личной религии, так что возьмите это с крошкой соли. В этом видео есть хороший обзор об этом, начиная с 2:13:00 . Все видео отлично подходит для IPython в целом.

Roland
источник