Como posso utilizar as matrizes NumPy para otimizar o geoprocessamento de big data?

16

Estou interessado em aprender a utilizar matrizes NumPy para otimizar o geoprocessamento. Grande parte do meu trabalho envolve "big data", onde o geoprocessamento geralmente leva dias para realizar determinadas tarefas. Escusado será dizer que estou muito interessado em otimizar essas rotinas. O ArcGIS 10.1 possui várias funções NumPy que podem ser acessadas via arcpy, incluindo:

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

Por exemplo, digamos que eu queira otimizar o seguinte fluxo de trabalho intensivo de processamento utilizando matrizes NumPy:

insira a descrição da imagem aqui

A idéia geral aqui é que existe um grande número de pontos baseados em vetores que se movem através de operações baseadas em vetores e em varredura, resultando em um conjunto de dados raster inteiro binário.

Como incorporar matrizes NumPy para otimizar esse tipo de fluxo de trabalho?

Aaron
fonte
2
Para sua informação, há também uma função NumPyArrayToRaster e uma função FeatureClassToNumPyArray .
blah238
2
A postagem no blog Multiprocessing with ArcGIS possui algumas informações boas que podem ser aplicadas aqui. Você também pode estar interessado em outras perguntas sobre multiprocessamento .
blah238
3
Parece-me que, antes de pensar em usar o Numpy no ArcPy, você primeiro precisa entender quais vantagens as matrizes NumPy oferecem sobre as listas Python. O escopo do Numpy é muito mais amplo que o ArcGIS.
gene
2
@ Gene, esta resposta StackOverflow parece resumir muito bem.
blah238
3
Como um aparte, se você também está interessado em Hadoop também - existem Big (espacial) Dados desenvolvimentos vale a pena conferir neste vídeo e em Ferramentas GIS para Hadoop
PolyGeo

Respostas:

3

Acho que o cerne da questão aqui é quais tarefas no seu fluxo de trabalho não são realmente dependentes do ArcGIS? Os candidatos óbvios incluem operações tabulares e raster. Se os dados devem começar e terminar dentro de um gdb ou algum outro formato ESRI, você precisará descobrir como minimizar o custo dessa reformatação (por exemplo, minimizar o número de viagens de ida e volta) ou até justificá-lo - simplesmente pode ser muito caro para racionalizar. Outra tática é modificar seu fluxo de trabalho para usar modelos de dados compatíveis com python anteriormente (por exemplo, em quanto tempo você poderia abandonar polígonos vetoriais?).

Para ecoar @gene, enquanto numpy / scipy são realmente ótimos, não assuma que essas são as únicas abordagens disponíveis. Você também pode usar listas, conjuntos, dicionários como estruturas alternativas (embora o link do @ blah238 seja bastante claro sobre diferenciais de eficiência), também existem geradores, iteradores e todos os tipos de outras ferramentas excelentes, rápidas e eficientes para trabalhar essas estruturas em python. Raymond Hettinger, um dos desenvolvedores do Python, tem todo tipo de conteúdo geral do Python. Este vídeo é um bom exemplo .

Além disso, para adicionar à idéia do @ blah238 em processamento multiplexado, se você estiver escrevendo / executando no IPython (não apenas no ambiente python "regular"), você pode usar o pacote "paralelo" para explorar vários núcleos. Eu não sou um gênio com essas coisas, mas acho que é um pouco mais alto / amigável para iniciantes do que as coisas de multiprocessamento. Provavelmente é apenas uma questão de religião pessoal lá, então leve isso com um grão de sal. Há uma boa visão geral sobre isso a partir das 2:13:00 deste vídeo . O vídeo inteiro é ótimo para o IPython em geral.

Roland
fonte