L'Inverse de la Distance Pondérée (IDW) Interpolation avec Python
La Question:
Quelle est la meilleure façon de calculer l'inverse de la distance pondérée (IDW) interpolation en Python, pour les emplacements des points?
Un Peu De Contexte:
Actuellement, je suis en utilisant RPy2 à l'interface avec la R et ses gstat module. Malheureusement, la gstat module de conflits avec arcgisscripting laquelle je suis arrivé en cours d'exécution RPy2 une analyse fondée sur un processus distinct. Même si ce problème est résolu dans un récent/version future, et d'améliorer l'efficacité, je voudrais encore supprimer mon dépendance sur l'installation de R.
La gstat site web fournit un seul exécutable, qui est plus facile à forfait avec mon script python, mais j'ai encore de l'espoir pour un Python solution qui ne nécessite pas de multiples écritures sur le disque et le lancement d'un processus externe. Le nombre d'appels à la fonction d'interpolation, des ensembles de points et de valeurs, peut approcher 20 000, le traitement que j'effectue.
J'ai précisément besoin pour interpoler des points, donc à l'aide de l'IDW fonction dans ArcGIS pour générer des trames de sons encore pire qu'à l'aide de R, en termes de performances.....à moins qu'il y est un moyen efficace de masque seulement les points dont j'ai besoin. Même avec cette modification, je ne m'attends pas à des performances à être tout ce que beaucoup. Je vais examiner cette option comme une autre alternative. Mise à JOUR: Le problème ici c'est que vous êtes lié à la taille de la cellule que vous utilisez. Si vous réduisez la cellule de taille pour obtenir une meilleure précision, le traitement prend beaucoup de temps. Vous devez également suivi par l'extraction par des points.....sur tous une méthode laide si vous souhaitez que les valeurs pour des points spécifiques.
J'ai regardé le scipy documentation, mais il n'a pas l'air comme il est simple de calculer IDW.
Je pense que je vais rouler ma propre mise en œuvre, éventuellement à l'aide de certaines scipy de la fonctionnalité localiser les points les plus proches et le calcul des distances.
Ai-je raté quelque chose d'évident? Est-il un module python je n'ai pas vu qui fait exactement ce que je veux? Est la création de mon propre mise en œuvre avec l'aide de scipy un choix judicieux?
Vous devez vous connecter pour publier un commentaire.
changé 20 Oct: cette classe Invdisttree combine inverse de la distance et de pondération
scipy.spatiales.KDTree.
Oublier l'original de la force brute de réponse;
c'est à mon humble avis, la méthode de choix pour le symbole scatter-interpolation de données.
Edit: @Denis est à droite, linéaire Rbf (par exemple scipy.interpoler.Rbf avec "fonction='linéaire',") n'est pas la même que IDW...
(Remarque, tous ces éléments vont utiliser des quantités excessives de mémoire si vous utilisez un grand nombre de points!)
Ici est un simple exampe de IDW:
Alors que, voici ce qu'en linéaire Rbf serait:
(À l'aide de la distance_matrix fonction ici:)
Mettre tous ensemble dans un joli copier-coller exemple, les rendements de certaines comparaison rapide des parcelles:
Maison IDW exemple de la parcelle http://www.geology.wisc.edu/~jkington/homemade_idw.pngMaison linéaire RBF exemple de la parcelle http://www.geology.wisc.edu/~jkington/homemade_rbf.pngScipy linéaire du RBF exemple de la parcelle http://www.geology.wisc.edu/~jkington/scipy_rbf.png