2009-07-29 68 views
20

Tengo un conjunto de datos que se parece a:Python interpolación

Table-1 
    X1 | Y1 
    ------+-------- 
    0.1 | 0.52147 
    0.02 | 0.8879 
    0.08 | 0.901 
    0.11 | 1.55 
    0.15 | 1.82 
    0.152 | 1.95 

Table-2 
    X2 | Y2 
    -----+------ 
    0.2 | 0.11 
    0.21 | 0.112 
    0.34 | 0.120 
    0.33 | 1.121  

tengo para interpolar el valor Y2 de la Tabla-2 para los X1 valores de la Tabla-1, es decir, tengo que encontrar los valores de Y2 para los siguientes valores de X:

X1  | Y2 
    -------+------- 
    0.1 | 
    0.02 | 
    0.08 | 
    0.11 | 
    0.15 | 
    0.152 | 

Nota: Tanto la Tabla-1 & 2 tienen intervalos desiguales. El número de entradas (X, Y) será diferente, por ejemplo, aquí tenemos 6 entradas (X1, Y1) en la Tabla-1 y solo 4 (X2, Y2) en la Tabla-2.

¿Qué algoritmo de interpolación debería usar en Numpy y cómo procedo?

Respuesta

29

numpy.interp parece ser la función que desee: pasar su X1 como primer argumento x, su X2 como el segundo argumento XP, su Y2 como el tercer argumento de FP, y obtendrá los valores de Y correspondiente al X1 coordenadas

Y2_at_X1 = np.interp(X1, X2, Y2) 

Asumo desea ignorar por completo las Y1 valores existentes. Esto es lo que hace el fragmento de arriba. De lo contrario, tendrá que aclarar su pregunta para explicar qué papel podría tener para Y1.

Si desea más que la interpolación lineal, le sugiero que consulte scipy.interpolate y su tutorial en lugar de tratar de estirar el numpy más allá de su simplicidad ;-).

+0

Gracias Alex, Honestamente, tengo algunas ideas ... Lo siento por una explicación pobre! para esta interpolación y extrapolación de 'Y2' NO uso los valores 'Y1'. Pero lo almacenaré como una matriz y lo usaré más. Pero mi función no es lineal, ¿es posible usar algunas técnicas de interpolación no lineal? (por ejemplo, Newton, tipo de Lagrange, etc.) para una mejor precisión ... Gracias una vez más –

+0

NP, vea mi respuesta editada para los punteros al código scipy que admite la interpolación no lineal. –

+0

Con estos valores particulares, todos los resultados de 'numpy.interp' serán 0.11. Todos los X1 dados están fuera del rango del X2 dado, por lo tanto, esto no es realmente intrarpolación en absoluto. Para obtener un resultado significativo, debe ajustar una función parametrizada específica a X2: Y2 y luego evaluar para X1: puede obtener resultados muy diferentes según la función elegida. – greggo