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:
Por exemplo, digamos que eu queira otimizar o seguinte fluxo de trabalho intensivo de processamento utilizando matrizes NumPy:
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?
Respostas:
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.
fonte