Scipy map_coordinates interpolación bilineal en comparación con interpolación interpola y IDL

Estoy en el proceso de reescribir un código IDL de compañeros de trabajo en python y estoy encontrando algunas diferencias con las que estoy confundido. De acuerdo con otras preguntas de SO y los hilos de la lista de correo que he encontrado si usa scipy.ndimage.interpolation.map_coordinates y especifica order=1 , se supone que debe hacer interpolación bilineal. Al comparar los resultados entre el código IDL (ejecutado en GDL) y python (map_coordinates) obtuve resultados diferentes. Luego intenté usar mpl_toolkits.basemap.interp y obtuve el mismo resultado que el código IDL. A continuación se muestra un ejemplo simple que muestra lo que está mal. ¿Podría alguien ayudarme a averiguar qué estoy haciendo mal con map_coordinates o es order=1 no bilineal?

 from scipy.ndimage.interpolation import map_coordinates from mpl_toolkits.basemap import interp import numpy in_data = numpy.array([[ 25.89125824, 25.88840675],[ 25.90930748, 25.90640068]], dtype=numpy.float32) map_coordinates(in_data, [[0.0],[0.125]], order=1, mode='nearest') # map_coordinates results in "25.89090157" interp(in_data, numpy.array([0,1]), numpy.array([0,1]), numpy.array([0.0]), numpy.array([0.125]), order=1) # interp results in "25.89351439", same as GDL's "25.8935" when printed 

Estoy perfectamente bien usando interp , pero tenía curiosidad de por qué map_coordinates no devolvió el mismo resultado. Noté que la documentación de map_coordinates no menciona bilineal, ¿es realmente bilinear? ¿Qué me estoy perdiendo?

Cuando usa map_coordinates , necesita transponer la matriz o cambiar las coordenadas al formato (y, x), porque la forma de la matriz es (height, width) .

 from scipy.ndimage.interpolation import map_coordinates from mpl_toolkits.basemap import interp import numpy in_data = numpy.array([[ 25.89125824, 25.88840675],[ 25.90930748, 25.90640068]], dtype=numpy.float32) print map_coordinates(in_data.T, [[0.0],[0.125]], order=1, mode='nearest') print interp(in_data, numpy.array([0,1]), numpy.array([0,1]), numpy.array([0.0]), numpy.array([0.125]), order=1) 

Esto dará como resultado:

 [ 25.89351463] [ 25.89351439]