¿Cómo puedo utilizar las matrices NumPy para optimizar el geoprocesamiento de big data?


16

Estoy interesado en aprender a utilizar matrices NumPy para optimizar el geoprocesamiento. Gran parte de mi trabajo implica "big data", donde el geoprocesamiento a menudo lleva días para realizar ciertas tareas. No hace falta decir que estoy muy interesado en optimizar estas rutinas. ArcGIS 10.1 tiene una serie de funciones NumPy a las que se puede acceder a través de arcpy, que incluyen:

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

Por ejemplo, supongamos que quiero optimizar el siguiente flujo de trabajo intensivo de procesamiento utilizando matrices NumPy:

ingrese la descripción de la imagen aquí

La idea general aquí es que hay una gran cantidad de puntos basados ​​en vectores que se mueven a través de operaciones basadas en vectores y ráster, lo que da como resultado un conjunto de datos ráster entero binario.

¿Cómo podría incorporar matrices NumPy para optimizar este tipo de flujo de trabajo?


2
Para su información, también hay una función NumPyArrayToRaster y una función FeatureClassToNumPyArray .
blah238

2
La publicación de blog Multiprocesamiento con ArcGIS tiene buena información que podría aplicarse aquí. También podría estar interesado en otras preguntas de multiprocesamiento .
blah238

3
Me parece que antes de pensar en usar Numpy en ArcPy, primero debe comprender qué ventajas ofrecen las matrices NumPy sobre las listas de Python. El alcance de Numpy es mucho más amplio que ArcGIS.
Gene

2
@gene, esta respuesta de StackOverflow parece resumirlo bastante bien.
blah238

3
Además, si también está interesado en Hadoop, hay desarrollos de Big (Spatial) Data que vale la pena ver en este video y en GIS Tools for Hadoop
PolyGeo

Respuestas:


3

Creo que el quid de la cuestión aquí es qué tareas en su flujo de trabajo no dependen realmente de ArcGIS. Los candidatos obvios incluyen operaciones tabulares y de trama. Si los datos deben comenzar y finalizar dentro de un gdb o algún otro formato ESRI, entonces debe descubrir cómo minimizar el costo de este reformateo (es decir, minimizar el número de viajes de ida y vuelta) o incluso justificarlo, simplemente podría ser demasiado caro de racionalizar. Otra táctica es modificar su flujo de trabajo para usar modelos de datos compatibles con Python antes (por ejemplo, ¿qué tan pronto podría deshacerse de los polígonos vectoriales?).

Para hacer eco a @gene, aunque numpy / scipy son realmente geniales, no asuma que estos son los únicos enfoques disponibles. También puede usar listas, conjuntos, diccionarios como estructuras alternativas (aunque el enlace de @ blah238 es bastante claro sobre los diferenciales de eficiencia), también hay generadores, iteradores y todo tipo de otras herramientas excelentes, rápidas y eficientes para trabajar estas estructuras en Python. Raymond Hettinger, uno de los desarrolladores de Python, tiene todo tipo de excelente contenido general de Python. Este video es un buen ejemplo .

Además, para agregar a la idea de @ blah238 sobre el procesamiento multiplexado, si está escribiendo / ejecutando dentro de IPython (no solo el entorno python "normal"), puede usar su paquete "paralelo" para explotar múltiples núcleos. No soy un genio con estas cosas, pero me parece un poco más alto / amigable para los novatos que las cosas de multiprocesamiento. Probablemente sea solo un tema de religión personal allí, así que tómalo con un grano de sal. Hay una buena descripción al respecto a partir de las 2:13:00 en este video . Todo el video es excelente para IPython en general.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.