La question: Quelle est la meilleure façon de calculer l'interpolation à distance inverse pondérée (IDW) en Python, pour les emplacements ponctuels?Interpolation à distance inverse pondérée (IDW) avec Python
Certains antécédents: Actuellement, j'utilise RPy2 pour interfacer avec R et son module gstat. Malheureusement, le module gstat est en conflit avec l'arcgisscripting que j'ai contourné en exécutant une analyse basée sur RPy2 dans un processus séparé. Même si ce problème est résolu dans une version récente/future, et l'efficacité peut être améliorée, je voudrais toujours supprimer ma dépendance sur l'installation R.
Le site Web gstat fournit un exécutable autonome, ce qui est plus facile à empaquette avec mon script python, mais j'espère toujours une solution Python qui ne nécessite pas plusieurs écritures sur le disque et qui lance des processus externes. Le nombre d'appels à la fonction d'interpolation, d'ensembles distincts de points et de valeurs, peut approcher 20 000 dans le traitement que j'effectue. J'ai spécifiquement besoin d'interpoler des points, donc utiliser la fonction IDW dans ArcGIS pour générer des rasters encore pire que R, en termes de performances ... à moins de pouvoir masquer efficacement les seuls points J'ai besoin. Même avec cette modification, je ne m'attendrais pas à ce que la performance soit aussi bonne. Je vais regarder dans cette option comme une autre alternative. MISE À JOUR: Le problème ici est que vous êtes lié à la taille de la cellule que vous utilisez. Si vous réduisez la taille de la cellule pour obtenir une meilleure précision, le traitement prend beaucoup de temps. Vous avez également besoin de suivre en extrayant par des points ..... sur une méthode laide si vous voulez des valeurs pour des points spécifiques.
J'ai regardé le scipy documentation, mais il ne semble pas qu'il y ait un moyen simple de calculer IDW.
Je pense à lancer ma propre implémentation, en utilisant éventuellement la fonctionnalité scipy pour localiser les points les plus proches et calculer les distances.
Est-ce que quelque chose me manque? Y at-il un module python que je n'ai pas vu qui fait exactement ce que je veux? Est-ce que créer ma propre implémentation à l'aide de scipy est un choix judicieux?
Denis, Plus tôt, vous avez demandé combien de points j'avais ... tout au plus, j'aurais quelques milliers de points source, donc pas assez pour m'inquiéter. C'est très utile, merci! –
@majgis, de rien. N = 100000 Nask = 100000 prendre ~ 24 sec 2d, 27 sec 3d, sur mon ancien mac g4 ppc. (Pour interpoler des données 2d sur une grille uniforme, matplotlib.delaunay est ~ 10 fois plus rapide - voir http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data) – denis
Voir l'avertissement [ici] (http: // stackoverflow.com/questions/6238250/multivariate-spline-interpolation-in-python-scipy) : "IDW est un choix * terrible * dans presque tous les cas ...". Néanmoins IDW peut avoir une combinaison raisonnable de simplicité, vitesse et douceur pour * vos * données. – denis