2017-03-08 2 views
0

Ich habe eine Reihe von Datenpunkten in Druck (p) und vmr. Ich mag den VMR-Wert für eine anderes Drucknetz finden (pressure_grid) .Ich verwendet np.interp,numpy.interpd -Rückkehr nur den letzten Wert nach der Interpolation

for lines in itertools.islice(input_file, i, l): 
    lines=lines.split() 
    p.append(float(lines[0])) 
    vmr.append(float(lines[3])) 
    x = np.array(p) 
    y = np.array(vmr) 

yi=np.interp(pressure_grid,x,y) 

Aber als ich versuchte, „yi“ es druckt nur den Wert (dh vmr Wert) zu drucken entspricht dem letzten Wert von "pressure_grid". Bei allen Iterationen wird der gleiche Wert ausgegeben Ich habe versucht, p und vmr zu drucken, bis dahin scheint alles in Ordnung zu sein. Ich kann nicht verstehen, warum das passiert ... Ich bin neu zu diesem ....... Hilfe bitte

So sieht meine Datei aus, erste Spalte-p und zweite Spalte-VMR.

enter image description here

und dies ist mein Drucknetz

enter image description here

https://1drv.ms/t/s!AmPNuP3pNnN8g35NPwIfzSl-VBeO https://1drv.ms/f/s!AmPNuP3pNnN8hAx3opovgipabSjJ

+0

Könnten Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) Ihres Codes bereitstellen? – Crispin

+0

Stellen Sie sicher, dass die pressure_grid-Werte zwischen dem minimalen und dem maximalen Wert von x enthalten sind. Andernfalls, wenn der Wert von pressure_grid höher als das Maximum von x ist, gibt es den y-Wert für das Maximum von x zurück –

+0

Entschuldigung für die späte Antwort, pressure_grid Werte haben Werte, die höher als x sind, gibt es eine andere Möglichkeit, diese zu extrapolieren values.I versuchte mit scipy.interpolate, aber es funktioniert auch nicht .. kann jemand andere Methoden vorschlagen, dies zu tun ..... danke – caty

Antwort

1

Es gibt zwei Probleme mit Ihrem Code. Zuerst werden x und y für jede Iteration der for-Schleife überschrieben, was bedeutet, dass x und y nur ein einziges Element für die Interpolation enthalten. Um dies zu beheben, könnte man x und y Liste außerhalb der Schleife definieren und in der for Schleife anhängen, oder einfacher, benutzen Sie einfach numpy.loadtxt():

import numpy as np 
data = np.loadtxt('demo.txt',comments='<',usecols=[0,2]) 

Hier habe ich angegebenen Zeilen überspringen mit einem Anfangs weniger als Zeichen , so erhalten wir nur die tatsächlichen Daten.

Zweitens, für numpy.interp um tatsächlich zu arbeiten, müssen Sie die X-Koordinate zu einem increasing sequence. (Überprüfen Sie die Notizen). Für Ihre Daten sind, x eine stetige Abnahme, so dass Sie die Daten nach dem Laden es klappen sollte:

x = data[::-1,0] 
y = data[::-1,1] 
interpolation = np.interp(grid,x,y) 

Alternativ können Sie nur die scipy.interpolate Paket auf den ursprünglichen, unflipped Daten verwenden. Dies hat den zusätzlichen Vorteil, dass Sie Daten zu extrapolieren, die nicht von Ihrem Eingangsdomäne eingeschlossen ist:

from scipy import interpolate 
interpolation = interpolate.interp1d(x,y,fill_value='extrapolate') 

Hinweis: Ihre Eingabedatei mehr als ein <Matrix> </Matrix> Set zu haben. Um all dies zum Laufen zu bringen, habe ich die Datei so getrimmt, dass sie nur einen Datensatz enthielt. Andernfalls werden Ihre x-Eingabedaten auch nach dem Spiegeln nicht streng zunehmen und Sie müssen sortieren.

+0

Danke..Danke, dass Sie so viel ... Zip.Interpolieren gearbeitet und ich habe das gewünschte Ergebnis. – caty

Verwandte Themen