Як я можу використовувати масиви NumPy для оптимізації геообробки великих даних?


16

Мені цікаво дізнатися, як використовувати масиви NumPy для оптимізації геообробки. Значна частина моєї роботи пов'язана з "великими даними", де геопроцедура часто займає кілька днів для виконання певних завдань. Потрібно сказати, що я дуже зацікавлений в оптимізації цих процедур. ArcGIS 10.1 має ряд функцій NumPy, до яких можна отримати доступ через arcpy, включаючи:

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

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

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

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

Як я можу включити масиви NumPy для оптимізації цього типу робочого процесу?


2
FYI, є також функція NumPyArrayToRaster та функція FeatureClassToNumPyArray .
blah238

2
У багатопроцесорній публікації блогу ArcGIS є хороша інформація, яка може бути застосована тут. Можливо, вас зацікавлять і інші багатопроцесорні питання .
blah238

3
Мені здається, що перш ніж задуматися про використання Numpy в ArcPy, спочатку потрібно зрозуміти, які переваги пропонують масиви NumPy над списками Python. Сфера застосування Numpy набагато ширша, ніж ArcGIS.
ген

2
@gene, ця відповідь StackOverflow, здається, підводить її досить добре.
blah238

3
Крім того, якщо вас теж цікавить Hadoop - є великі (просторові) розробки даних, які варто переглянути у цьому відео та на GIS Інструменти для Hadoop
PolyGeo

Відповіді:


3

Я думаю, що суть питання тут полягає в тому, які завдання у вашому робочому процесі насправді не залежать від ArcGIS? Очевидними кандидатами є табличні та растрові операції. Якщо дані повинні починатись і закінчуватися у форматі gdb чи іншому ESRI-форматі, то вам потрібно розібратися, як мінімізувати витрати на це переформатування (тобто мінімізувати кількість туди-назад) або навіть виправдати їх - просто може бути занадто раціоналізувати дорого. Ще одна тактика полягає в тому, щоб змінити робочий процес, щоб раніше використовувати зручні для python моделі даних (наприклад, як швидко ви могли б скинути векторні багатокутники?).

Для відлуння @gene, хоча numpy / scipy справді чудові, не вважайте, що це єдині доступні підходи. Ви також можете використовувати списки, набори, словники як альтернативні структури (хоча посилання на @ blah238 досить чітке щодо ефективності), також є генератори, ітератори та всілякі інші чудові, швидкі та ефективні інструменти для роботи цих структур у python. У Реймонда Хеттінгера, одного з розробників Python, існує всілякий чудовий загальний вміст Python. Це відео - приємний приклад .

Крім того, щоб додати ідею @ blah238 щодо мультиплексної обробки, якщо ви пишете / виконуєте в межах IPython (не лише "звичайне" середовище python), ви можете використовувати їх "паралельний" пакет для використання декількох ядер. Мені не до душі з цими речами, але вважаю, що це трохи вищий рівень / для початківців, ніж багатопроцесорний матеріал. Напевно, це просто питання особистої релігії, тому прийміть це із зерном солі. У цьому відео хороший огляд, починаючи з 2:13:00 . Ціле відео відмінно підходить для IPython загалом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.