2009-07-29 15 views
20

Ho una serie di dati che assomiglia:Python interpolazione

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  

devo interpolare il valore Y2 dalla tabella-2 per i valori X1 da Table-1, vale a dire, ho bisogno di trovare i valori di Y2 per i seguenti valori di X:

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

Nota: Entrambi Tabella-1 & 2 hanno intervalli diseguali. Il numero di voci (X, Y) sarà diverso, ad esempio, qui abbiamo 6 (X1, Y1) voci in Table-1 e solo 4 (X2, Y2) in Table-2.

Quale algoritmo di interpolazione dovrei usare in Numpy e come procedere?

risposta

29

numpy.interp sembra essere la funzione che si desidera: passare il X1 come primo argomento x, il vostro X2 come secondo xp argomento, il vostro Y2 come terzo argomento fp, e otterrai i valori Y corrispondente al X1 coordinate.

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

sto supponendo che si desidera ignorare completamente i Y1 valori esistenti. Questo è ciò che fa il frammento di cui sopra. Altrimenti dovrai chiarire la tua domanda per spiegare quale ruolo potresti avere per Y1!

Se si desidera più dell'interpolazione lineare, suggerisco di guardare scipy.interpolate e il suo tutorial piuttosto che cercare di allungare il numero oltre la sua semplicità ;-).

+0

Grazie Alex, Onestamente ho alcune idee .. Scusa per una spiegazione scarsa! per questa interpolazione ed estrapolazione di "Y2" NON usare i valori "Y1". Ma lo conserverò come un array e lo useremo ulteriormente. Ma la mia funzione non è lineare, è possibile utilizzare alcune tecniche di interpolazione non lineare? (ad esempio, Newton, tipo Lagrange ecc.) per una migliore precisione ... Grazie ancora –

+0

NP, vedere la mia risposta modificata per i puntatori a codice scipy che supporta l'interpolazione non lineare. –

+0

Con questi valori particolari, tutti i risultati di 'numpy.interp' saranno 0.11. Tutte le X1 date sono al di fuori dell'intervallo dell'X2 dato, quindi questa non è affatto una inrerpolazione. Per ottenere un risultato significativo, è necessario adattare una specifica funzione parametrizzata a X2: Y2 e quindi valutare per X1 - si potrebbero ottenere risultati molto diversi a seconda della scelta della funzione. – greggo