Wie kann ich NumPy-Arrays verwenden, um die Geoverarbeitung von Big Data zu optimieren?


16

Ich möchte lernen, wie NumPy-Arrays zur Optimierung der Geoverarbeitung verwendet werden. Ein Großteil meiner Arbeit umfasst "Big Data", bei dem die Geoverarbeitung oft Tage in Anspruch nimmt, um bestimmte Aufgaben zu erledigen. Ich bin natürlich sehr daran interessiert, diese Routinen zu optimieren. ArcGIS 10.1 verfügt über eine Reihe von NumPy-Funktionen, auf die über arcpy zugegriffen werden kann, darunter:

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

Nehmen wir zum Beispiel an, ich möchte den folgenden verarbeitungsintensiven Workflow mithilfe von NumPy-Arrays optimieren:

Bildbeschreibung hier eingeben

Die allgemeine Idee dabei ist, dass es eine große Anzahl von vektorbasierten Punkten gibt, die sowohl durch vektorbasierte als auch rasterbasierte Operationen bewegt werden, was zu einem binären Ganzzahl-Raster-Dataset führt.

Wie könnte ich NumPy-Arrays einbinden, um diese Art von Workflow zu optimieren?


2
Außerdem gibt es eine NumPyArrayToRaster- Funktion und eine FeatureClassToNumPyArray- Funktion.
blah238

2
Der Blog-Beitrag " Multiprocessing with ArcGIS" enthält einige nützliche Informationen, die möglicherweise hier zutreffen. Möglicherweise interessieren Sie sich auch für andere Multiprocessing-Fragen .
blah238

3
Bevor Sie über die Verwendung von Numpy in ArcPy nachdenken, müssen Sie zunächst wissen, welche Vorteile NumPy-Arrays gegenüber Python-Listen bieten. Der Umfang von Numpy ist wesentlich größer als der von ArcGIS.
Gen

2
@gene, diese StackOverflow-Antwort scheint es ziemlich gut zusammenzufassen.
blah238

3
Als beiseite, auch wenn Sie zu in Hadoop interessiert sind - es gibt große (Spatial) Entwicklungen Datenwert ist in diesem Check - out - Video und GIS - Tools für Hadoop
PolyGeo

Antworten:


3

Ich denke, der springende Punkt hierbei ist, welche Aufgaben in Ihrem Workflow nicht wirklich von ArcGIS abhängig sind. Offensichtliche Kandidaten sind Tabellen- und Rasteroperationen. Wenn die Daten in einer GDB oder einem anderen ESRI-Format beginnen und enden müssen, müssen Sie herausfinden, wie Sie die Kosten für diese Neuformatierung minimieren (dh die Anzahl der Roundtrips minimieren) oder sie sogar rechtfertigen können - möglicherweise auch teuer zu rationalisieren. Eine andere Taktik besteht darin, den Workflow so zu ändern, dass früher pythonfreundliche Datenmodelle verwendet werden (wie schnell könnten Sie beispielsweise Vektorpolygone entfernen?).

Um @gene zu bestätigen, sollten Sie nicht davon ausgehen, dass dies die einzigen verfügbaren Ansätze sind, obwohl Numpy / Scipy wirklich großartig sind. Sie können auch Listen, Mengen und Wörterbücher als alternative Strukturen verwenden (obwohl der Link zu @ blah238 ziemlich klar über Effizienzunterschiede ist), es gibt auch Generatoren, Iteratoren und alle Arten anderer großartiger, schneller und effizienter Werkzeuge, um diese Strukturen in Python zu bearbeiten. Raymond Hettinger, einer der Python-Entwickler, hat alle Arten von großartigen allgemeinen Python-Inhalten. Dieses Video ist ein schönes Beispiel .

Um die Idee von @ blah238 zur Multiplex-Verarbeitung zu erweitern, können Sie, wenn Sie in IPython schreiben / ausführen (nicht nur in der "normalen" Python-Umgebung), deren "paralleles" Paket zum Ausnutzen mehrerer Kerne verwenden. Ich bin nicht gerade begeistert von diesem Zeug, aber finde es ein bisschen überdurchschnittlich / einsteigerfreundlich als das Multiprocessing-Zeug. Wahrscheinlich wirklich nur eine Frage der persönlichen Religion, also nimm das mit einem Körnchen Salz. Es gibt eine gute Übersicht darüber ab 2:13:00 in diesem Video . Das gesamte Video eignet sich hervorragend für IPython im Allgemeinen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.