La pregunta: ¿Cuál es la mejor manera de calcular la interpolación de distancia inversa ponderada (IDW) en Python, para ubicaciones de puntos?Interpolación de distancia inversa ponderada (IDW) con Python
Algunos antecedentes: Actualmente estoy utilizando RPy2 para interactuar con R y su módulo gstat. Lamentablemente, el módulo gstat entra en conflicto con arcgisscripting, que obtuve mediante la ejecución de análisis basados en RPy2 en un proceso separado. Incluso si este problema se resuelve en una versión reciente/futura y se puede mejorar la eficiencia, aún me gustaría eliminar mi dependencia al instalar R.
El sitio web gstat proporciona un ejecutable independiente, que es más fácil de usar paquete con mi secuencia de comandos python, pero todavía espero una solución de Python que no requiera múltiples escrituras en el disco y el inicio de procesos externos. El número de llamadas a la función de interpolación, de conjuntos separados de puntos y valores, puede acercarse a 20,000 en el procesamiento que estoy realizando.
Específicamente necesito interpolar puntos, por lo que usar la función IDW en ArcGIS para generar sonidos ráster es aún peor que usar R, en términos de rendimiento ..... a menos que haya una manera de enmascarar eficientemente solo los puntos Necesito. Incluso con esta modificación, no esperaría que el rendimiento fuera tan bueno. Consideraré esta opción como otra alternativa. ACTUALIZACIÓN: el problema aquí es que estás vinculado al tamaño de celda que estás usando. Si reduce el tamaño de la celda para obtener una mayor precisión, el procesamiento lleva mucho tiempo. También necesita hacer un seguimiento extrayendo por puntos ..... sobre todo un método desagradable si quiere valores para puntos específicos.
He consultado scipy documentation, pero no parece que haya una manera directa de calcular IDW.
Estoy pensando en implementar mi propia implementación, posiblemente usando algunas de las funciones scipy para localizar los puntos más cercanos y calcular distancias.
¿Me falta algo obvio? ¿Hay algún módulo de Python que no haya visto que haga exactamente lo que quiero? ¿Crear mi propia implementación con la ayuda de scipy es una buena elección?
Denis, Antes me preguntaba cuántos puntos tenía ... como mucho tendré un par de miles de puntos de origen, por lo tanto no es suficiente para preocuparse. Esto es muy útil, ¡gracias! –
@majgis, de nada. N = 100000 Nask = 100000 toma ~ 24 seg 2d, 27 seg 3d, en mi viejo mac g4 ppc. (Para la interpolación de datos 2d a una grilla uniforme, matplotlib.delaunay es ~ 10 veces más rápido - consulte http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data) – denis
Consulte la advertencia [aquí] (http: // stackoverflow.com/questions/6238250/multivariate-spline-interpolation-in-python-scipy) : "IDW es una opción * terrible * en casi todos los casos ...". No obstante, IDW puede tener una combinación razonable de simplicidad, velocidad y uniformidad para * sus * datos. – denis