Come posso utilizzare gli array NumPy per ottimizzare il geoprocessing dei big data?


16

Sono interessato a imparare come utilizzare gli array NumPy per ottimizzare il geoprocessing. Gran parte del mio lavoro riguarda i "big data", in cui il geoprocessing richiede spesso giorni per svolgere determinati compiti. Inutile dire che sono molto interessato a ottimizzare queste routine. ArcGIS 10.1 ha un numero di funzioni NumPy a cui è possibile accedere tramite arcpy, tra cui:

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

Ad esempio, supponiamo di voler ottimizzare il seguente flusso di lavoro intensivo di elaborazione utilizzando array NumPy:

inserisci qui la descrizione dell'immagine

L'idea generale qui è che esiste un numero enorme di punti basati su vettori che si muovono attraverso operazioni sia vettori che raster, dando origine a un set di dati raster intero binario.

Come potrei incorporare gli array NumPy per ottimizzare questo tipo di flusso di lavoro?


2
A proposito, c'è anche un NumPyArrayToRaster funzione e una FeatureClassToNumPyArray funzione.
blah238

2
Il post sul blog Multiprocessing con ArcGIS contiene alcune buone informazioni che potrebbero essere applicate qui. Potresti anche essere interessato ad altre domande sul multiprocessing .
blah238

3
Mi sembra che prima di pensare all'utilizzo di Numpy in ArcPy, devi prima capire quali vantaggi offrono gli array NumPy rispetto agli elenchi Python. Lo scopo di Numpy è molto più ampio di ArcGIS.
gene

2
@gene, questa risposta StackOverflow sembra riassumere abbastanza bene.
blah238

3
A parte questo, se sei interessato anche a Hadoop - ci sono sviluppi Big (spaziali) di dati che vale la pena dare un'occhiata in questo video e su GIS Tools for Hadoop
PolyGeo

Risposte:


3

Penso che il punto cruciale della domanda qui sia quali attività nel tuo flusso di lavoro non sono realmente dipendenti da ArcGIS? I candidati ovvi includono operazioni tabulari e raster. Se i dati devono iniziare e finire all'interno di un gdb o di un altro formato ESRI, è necessario capire come ridurre al minimo il costo di questo riformattato (ovvero ridurre al minimo il numero di round trip) o addirittura giustificarlo - semplicemente potrebbe essere troppo costoso da razionalizzare. Un'altra tattica è quella di modificare il flusso di lavoro per utilizzare prima i modelli di dati compatibili con Python (ad esempio, quanto tempo potresti abbandonare i poligoni vettoriali?).

Per fare eco a @gene, mentre numpy / scipy sono davvero fantastici, non dare per scontato che questi siano gli unici approcci disponibili. Puoi anche usare liste, set, dizionari come strutture alternative (anche se il link di @ blah238 è abbastanza chiaro sui differenziali di efficienza), ci sono anche generatori, iteratori e tutti i tipi di altri strumenti grandi, veloci ed efficienti per lavorare queste strutture in Python. Raymond Hettinger, uno degli sviluppatori di Python, ha tutti i tipi di fantastici contenuti Python in circolazione. Questo video è un bell'esempio .

Inoltre, per aggiungere l'idea di @ blah238 sull'elaborazione multiplata, se stai scrivendo / eseguendo all'interno di IPython (non solo l'ambiente "normale" di Python), puoi utilizzare il loro pacchetto "parallelo" per sfruttare più core. Non sono un mago di queste cose, ma lo trovo un po 'più alto / adatto ai principianti rispetto alle cose multiprocessore. Probabilmente è solo un problema di religione personale lì, quindi prendilo con un granello di sale. C'è una buona panoramica a riguardo a partire dalle 2:13:00 in questo video . L'intero video è ottimo per IPython in generale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.