Die Frage: Was ist der beste Weg, um inverse Distanz gewichtete (IDW) Interpolation in Python, für Punktpositionen zu berechnen?Inverse Distanz gewichtet (IDW) Interpolation mit Python
Hintergrund: Momentan verwende ich RPy2, um mit R und seinem gstat Modul zu verbinden. Leider steht das gstat-Modul in Konflikt mit arcgisscripting, das ich durch Ausführen von RPy2-basierter Analyse in einem separaten Prozess erhalten habe. Selbst wenn dieses Problem in einer aktuellen/zukünftigen Version behoben wird und die Effizienz verbessert werden kann, möchte ich dennoch meine Abhängigkeit von der Installation von R entfernen.Die gstat-Website bietet eine eigenständige ausführbare Datei, die einfacher zu installieren ist Paket mit meinem Python-Skript, aber ich hoffe immer noch auf eine Python-Lösung, die nicht mehrere Schreibvorgänge auf Festplatte erfordert und externe Prozesse startet. Die Anzahl von Aufrufen der Interpolationsfunktion, von separaten Mengen von Punkten und Werten, kann in der von mir ausgeführten Verarbeitung 20.000 erreichen.
Ich muss speziell für Punkte interpolieren, also mit der IDW-Funktion in ArcGIS zu erzeugen Raster klingt noch schlechter als mit R, in Bezug auf die Leistung ..... es sei denn, es gibt eine Möglichkeit, nur die Punkte effizient auszublenden Ich brauche. Selbst mit dieser Modifikation würde ich nicht erwarten, dass die Leistung so gut ist. Ich werde diese Option als eine weitere Alternative betrachten. UPDATE: Das Problem hier ist, dass Sie an die von Ihnen verwendete Zellengröße gebunden sind. Wenn Sie die Zellengröße verringern, um eine bessere Genauigkeit zu erzielen, dauert die Verarbeitung sehr lange. Sie müssen auch folgen, indem Sie Punkte extrahieren ..... über alle eine hässliche Methode, wenn Sie Werte für bestimmte Punkte wollen.
Ich habe mir die scipy documentation angesehen, aber es sieht nicht so aus, als gäbe es einen einfachen Weg IDW zu berechnen.
Ich denke darüber nach, meine eigene Implementierung zu rollen, möglicherweise mithilfe einiger der scipy-Funktionen, um die nächstgelegenen Punkte zu finden und Entfernungen zu berechnen.
Fehle ich etwas offensichtlich? Gibt es ein Python-Modul, das ich nicht gesehen habe, das genau das tut, was ich will? Erstelle ich meine eigene Implementierung mit Hilfe von scipy eine kluge Wahl?
Denis, früher hast du gefragt, wie viele Punkte ich habe ... höchstens habe ich ein paar tausend Quellpunkte, also nicht genug, um mir Sorgen zu machen. Das ist sehr hilfreich, danke! –
@majgis, gern geschehen. N = 100000 Nask = 100000 nimm ~ 24 sec 2d, 27 sec 3d, auf meinem alten Mac g4 ppc. (Für die Interpolation von 2d-Daten in ein einheitliches Raster ist matplotlib.delaunay ~ 10 mal schneller - siehe http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data) – denis
Siehe die Warnung [hier] (http: // stackoverflow.com/questions/6238250/multivariate-spline-interpolation-in-python-scipy) : "IDW ist eine * schreckliche * Wahl in fast jedem Fall ...". Dennoch IDW kann eine angemessene Kombination von Einfachheit, Geschwindigkeit und Sanftheit für * Ihre * Daten haben. – denis