2009-07-29 6 views
20

J'ai un ensemble de données qui ressemble à:interpolation Python

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  

Je dois interpoler la valeur Y2 du tableau-2 pour les valeurs de X1 Tableau-1, à savoir, je dois trouver les valeurs de Y2 pour les valeurs suivantes de X:

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

note: les deux Tableau 1 & 2 ont des intervalles inégaux. Le nombre d'entrées (X, Y) différera, par exemple, ici nous avons 6 entrées (X1, Y1) dans le tableau 1 et seulement 4 (X2, Y2) dans le tableau 2.

Quel algorithme d'interpolation devrais-je utiliser dans Numpy, et comment procéder?

Répondre

29

numpy.interp semble être la fonction que vous souhaitez: passer votre X1 comme premier argument x, votre X2 comme deuxième xp argument, votre Y2 comme troisième argument fp, et vous obtenez les valeurs Y correspondant au X1 coordonnées.

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

Je suppose que vous voulez ignorer complètement les Y1 valeurs existantes. C'est ce que fait l'extrait ci-dessus. Sinon, vous devrez clarifier votre question pour expliquer quel rôle vous pourriez avoir pour Y1!

Si vous voulez plus que l'interpolation linéaire, je vous suggère de regarder scipy.interpolate et son tutorial plutôt que d'essayer d'étirer numpy au-delà de sa simplicité ;-).

+0

Merci Alex, Honnêtement, j'ai eu quelques idées .. Désolé pour une mauvaise explication! pour cette interpolation et extrapolation de 'Y2', je n'utilise PAS les valeurs 'Y1'. Mais je vais le stocker comme un tableau et l'utiliser plus loin. Mais ma fonction est non-linéaire, est-il possible d'utiliser des techniques d'interpolation non-linéaire? (par exemple, Newton, type Lagrange etc,) pour une meilleure précision ... Merci encore –

+0

NP, voir ma réponse éditée pour les pointeurs sur le code scipy qui supporte l'interpolation non linéaire. –

+0

Avec ces valeurs particulières, tous les résultats de 'numpy.interp' seront de 0.11. Tous les X1 donnés sont en dehors de la plage du X2 donné, donc ce n'est pas du tout vraiment inacceptable. Pour obtenir un résultat significatif, vous devez adapter une fonction paramétrée spécifique au X2: Y2 puis à l'évaluation X1 - vous pourriez obtenir des résultats très différents en fonction du choix de la fonction. – greggo