Tengo una grilla regular de valores de entrenamiento (vectores x y y con grillas respectivas xmesh y ymesh y valores conocidos de zmesh) pero un disperso/desigual/grupo irregular de valores a interpolar (vectores xI y yI, donde estamos interesados en zI [0] = f (xI [0], yI [0]) ... zI [N-1] = f (xI [N] -1], yI [N-1]). Esta interpolación se llamará millones de veces como parte de un problema de optimización, por lo que el rendimiento es demasiado importante simplemente para usar un método que hace la cuadrícula y toma la traza.Interpolación rápida en 2-D en Python con SciPy cuadrícula regular a evaluación dispersa/irregular
Hasta ahora, he podido encontrar una función de scipy.interpolate que se acerca a lo que quiero, la función Bpf. Sin embargo, como cuenta una entrada dispersa, supongo que no tiene un buen rendimiento y yo ' d li Para probarlo con los métodos de interpolación spline, lineal y de vecino más cercano, lo entiendo mejor y espero que sea más rápido. Todos los métodos que implementan estos que podría encontrar que toman las cuadrículas regulares como datos de entrenamiento (como RectBivariateSpline) también parecen requerir grillas regulares para que los valores se interpolen.
Espero que este código aclare lo que estoy pidiendo.
import numpy as np
import scipy as sp
import scipy.interpolate as interp
x = np.arange(0,2*np.pi,.1)
y = x
xmesh,ymesh = np.meshgrid(x,y)
zmesh = np.sin(xmesh)+np.cos(ymesh)
rbf = interp.Rbf(xmesh, ymesh, zmesh, epsilon=2)
xI = np.arange(0,np.pi,.05)
yI = xI
XI, YI = np.meshgrid(xI,yI)
# Notice how this is happy to take a vector or grid as input
zI = rbf(xI, yI)
ZI = rbf(XI,YI) # equiv. to zImesh
myspline = interp.RectBivariateSpline(x, y, zmesh)
# myspline takes vectors as input but makes them into meshes for evaluation
splineoutput = myspline(xI, yI)
# myspline returns ZI but I want zI
print(splineoutput)
print(ZI)
print(zI)
¿Hay algo que pueda hacer para utilizar una función como RectBivariateSpline pero para obtener zI (vector) en lugar de ZI (malla)? O, como alternativa, ¿existe otra familia de funciones que funcione de la manera que yo quiero en métodos de optimización alternativos? De ser así, ¿qué debería buscar?
Solo un rápido recordatorio de que lo que estoy buscando es una técnica de optimización rápida en matrices de datos relativamente grandes (más de 20,000 entradas), con distancias pequeñas entre puntos de la grilla, y donde los datos son bastante suaves. Sospecho que hay una buena y sencilla forma de hacer lo que necesito con las bibliotecas existentes, pero no puedo encontrarlo. Gracias por la ayuda.
Eso parece ser exactamente lo que quería. Sabía que había algo incorporado para ayudar. ¡Gracias! – BKay
Vea también esta respuesta para el caso n-dimensional: http://stackoverflow.com/questions/16983843/fast-interpolation-of-grid-data – j13r