Comment puis-je utiliser les baies NumPy pour optimiser le géotraitement des mégadonnées?

16

Je souhaite apprendre à utiliser les tableaux NumPy pour optimiser le géotraitement. Une grande partie de mon travail implique des «mégadonnées», où le géotraitement prend souvent des jours pour accomplir certaines tâches. Inutile de dire que je suis très intéressé par l'optimisation de ces routines. ArcGIS 10.1 dispose d'un certain nombre de fonctions NumPy accessibles via arcpy, notamment:

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

À titre d'exemple, disons que je souhaite optimiser le flux de travail intensif de traitement suivant à l'aide de tableaux NumPy:

entrez la description de l'image ici

L'idée générale ici est qu'il existe un grand nombre de points vectoriels qui se déplacent à la fois à partir d'opérations vectorielles et raster, résultant en un ensemble de données raster entier binaire.

Comment pourrais-je incorporer des tableaux NumPy pour optimiser ce type de flux de travail?

Aaron
la source
2
Pour info, il existe également une fonction NumPyArrayToRaster et une fonction FeatureClassToNumPyArray .
blah238
2
Le billet de blog Multiprocessing with ArcGIS contient de bonnes informations qui pourraient s'appliquer ici. Vous pourriez également être intéressé par d' autres questions de multitraitement .
blah238
3
Il me semble qu'avant de penser à utiliser Numpy dans ArcPy, vous devez d'abord comprendre quels avantages les tableaux NumPy offrent par rapport aux listes Python. La portée de Numpy est beaucoup plus large qu'ArcGIS.
gène
2
@gene, cette réponse StackOverflow semble assez bien résumer.
blah238
3
En passant, si vous êtes également intéressé par Hadoop - il y a des développements Big (Spatial) qui valent la peine d'être vérifiés dans cette vidéo et dans GIS Tools for Hadoop
PolyGeo

Réponses:

3

Je pense que le nœud de la question ici est de savoir quelles tâches de votre flux de travail ne dépendent pas vraiment d'ArcGIS? Les candidats évidents incluent les opérations tabulaires et raster. Si les données doivent commencer et se terminer dans un gdb ou un autre format ESRI, vous devez alors trouver comment minimiser le coût de ce reformatage (c.-à-d. Minimiser le nombre d'aller-retour) ou même le justifier - cela pourrait tout simplement être trop cher à rationaliser. Une autre tactique consiste à modifier votre flux de travail pour utiliser plus tôt des modèles de données compatibles avec Python (par exemple, dans combien de temps pourriez-vous abandonner les polygones vectoriels?).

Pour faire écho à @gene, bien que numpy / scipy soient vraiment excellents, ne supposez pas que ce sont les seules approches disponibles. Vous pouvez également utiliser des listes, des ensembles, des dictionnaires comme structures alternatives (bien que le lien de @ blah238 soit assez clair sur les différences d'efficacité), il existe également des générateurs, des itérateurs et toutes sortes d'autres excellents outils rapides et efficaces pour travailler ces structures en python. Raymond Hettinger, l'un des développeurs de Python, a toutes sortes d'excellents contenus généraux Python. Cette vidéo est un bel exemple .

De plus, pour ajouter à l'idée de @ blah238 sur le traitement multiplexé, si vous écrivez / exécutez dans IPython (pas seulement l'environnement python "normal"), vous pouvez utiliser leur package "parallèle" pour exploiter plusieurs cœurs. Je ne suis pas doué pour ce genre de choses, mais je le trouve un peu plus adapté aux débutants / niveau supérieur que les choses multiprocessing. Probablement vraiment juste une question de religion personnelle, alors prenez cela avec un grain de sel. Il y a un bon aperçu à ce sujet à partir de 2:13:00 dans cette vidéo . La vidéo entière est idéale pour IPython en général.

Roland
la source