¿Cuál es el enfoque preferido y eficiente para interpolar datos multidimensionales?
Cosas que me preocupan:
- rendimiento y memoria para la construcción, evaluación individual / por lotes
- manejo de dimensiones de 1 a 6
- lineal o de orden superior
- capacidad de obtener gradientes (si no lineales)
- cuadrícula regular vs dispersa
- utilizando como función de interpolación, por ejemplo, para encontrar raíces o para minimizar
- capacidades de extrapolación
¿Existe una implementación eficiente de código abierto de esto?
Tuve suerte parcial con scipy.interpolate y kriging de scikit-learn.
No probé splines, polinomios de Chebyshev, etc.
Esto es lo que encontré hasta ahora sobre este tema:
Interpolación lineal Python 4D en una cuadrícula rectangular
Interpolación rápida de datos 3D muestreados regularmente con diferentes intervalos en x, y y z
Interpolación rápida de datos de cuadrícula regulares.
¿Qué método de interpolación dispersa multivariante es el mejor para uso práctico?
Respuestas:
Para la primera parte de mi pregunta, encontré esta comparación muy útil para el rendimiento de diferentes métodos de interpolación lineal utilizando bibliotecas de python:
http://nbviewer.ipython.org/github/pierre-haessig/stodynprog/blob/master/stodynprog/linear_interp_benchmark.ipynb
A continuación se muestra una lista de los métodos recopilados hasta ahora.
Interpolación estándar, cuadrícula estructurada:
http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.ndimage.interpolation.map_coordinates.html
http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.RegularGridInterpolator.html
https://github.com/rncarpio/linterp/
Cuadrícula no estructurada (dispersa):
http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.LinearNDInterpolator.html#scipy.interpolate.LinearNDInterpolator
http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html
http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.Rbf.html
2 grandes proyectos que incluyen interpolación:
https://github.com/sloriot/cgal-bindings (partes de CGAL, licencia GPL / LGPL)
https://www.earthsystemcog.org/projects/esmp/ (Licencia de la Universidad de Illinois-NCSA ~ = MIT + BSD-3)
Rejillas dispersas:
https://github.com/EconForge/Smolyak
https://github.com/EconForge/dolo/tree/master/dolo/numeric/interpolation
http://people.sc.fsu.edu/~jburkardt/py_src/sparse_grid/sparse_grid.html
https://aerodynamics.lr.tudelft.nl/~rdwight/work_sparse.html
https://pypi.python.org/pypi/puq
Kriging (proceso gaussiano):
http://scikit-learn.org/stable/modules/generated/sklearn.gaussian_process.GaussianProcess.html
https://github.com/SheffieldML/GPy
https://software.sandia.gov/svn/surfpack/trunk/
http://openmdao.org/dev_docs/_modules/openmdao/lib/surrogatemodels/kriging_surrogate.html
Licencia GPL general:
https://github.com/rncarpio/delaunay_linterp
Tasmanian
El juego de herramientas para el modelado estocástico adaptativo y la aproximación no intrusiva es una biblioteca robusta para la integración e interpolación de alta dimensión, así como la calibración de parámetros.
Enlace de Python para Tasmania:
https://github.com/rncarpio/py_tsg
https://github.com/sloriot/cgal-bindings (partes de CGAL, licencia GPL / LGPL)
fuente