¿Cómo puedo utilizar matrices NumPy para optimizar el geoprocesamiento de grandes datos?

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 toma 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, incluidas:

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

A modo de ejemplo, digamos que quiero optimizar el siguiente flujo de trabajo de procesamiento intensivo utilizando matrices NumPy:

La idea general aquí es que hay una gran cantidad de puntos basados en vectores que se mueven a través de operaciones basadas tanto en vectores como en ráster, lo que resulta en un dataset ráster de enteros binarios.

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

    
pregunta Aaron 29.03.2013 - 19:15

1 respuesta

3

Creo que el meollo de la pregunta aquí es: ¿qué tareas en su flujo de trabajo no dependen realmente de ArcGIS? Los candidatos obvios incluyen operaciones tabulares y rasterizadas. Si los datos deben comenzar y finalizar dentro de un gdb o algún otro formato de ESRI, entonces debe averiguar cómo minimizar el costo de este reformateo (es decir, minimizar el número de viajes de ida y vuelta) o incluso justificarlo, simplemente puede ser demasiado caro para 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 hacerse eco de @gene, aunque numpy / scipy son realmente geniales, no asumas 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 acerca de los diferenciales de eficiencia), también hay generadores, iteradores y todo tipo de 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 .

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

    
respondido por el Roland 20.05.2013 - 17:50

Lea otras preguntas en las etiquetas