2017-03-08 75 views
0

我有一組壓力(p)和vmr中的數據點。 我想找到另一個壓力格(pressure_grid)。我使用np.interp的VMR值,numpy.interpd - 只返回插值後的最後一個值

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) 

但是,當我試圖打印「一」是隻打印值(即VMR值)對應於「pressure_grid」的最後一個值。對於所有迭代,它將打印相同的值 我試圖打印p和vmr,一切似乎都很好,直到那裏。我無法理解爲什麼會發生這種情況...... 我是新來的........請幫忙

這就是我的文件看起來像第一列-p和第二列-vmr。

enter image description here

,這是我的壓力格

enter image description here

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

+0

您能否提供您的代碼的[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)? – Crispin

+0

確保pressure_grid值包含在x的最小值和最大值之間。否則,如果pressure_grid的值高於x的最大值,它將返回最大值爲x的y值。 –

+0

對於遲到的回覆,抱歉,pressure_grid值的值高於x,是否有任何其他方式來推斷這些值values.I嘗試使用scipy.interpolate,但它也不工作..可以有人建議任何其他方法來做到這一點.....謝謝你 – caty

回答

1

有你的代碼的兩個問題。對於for循環的每次迭代,第一個xy被覆蓋,這意味着,xy僅包含用於插值的單個元素。爲了解決這個問題,你可以定義xy表外循環,並在for環追加,或者更簡單,只需使用numpy.loadtxt()

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

在這裏,我指定跳過一個小於號開始的行,所以我們只得到實際的數據。

其次,對於numpy.interp實際工作,您需要的x座標是increasing sequence。 (檢查筆記)。爲您的數據,x是遞減的順序,所以你應該加載它翻轉後的數據:

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

或者,你可以只使用scipy.interpolate包裝上的原始,unflipped數據。這有讓您可以推斷不是由你的輸入域所包含的數據額外的好處:

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

注意:輸入文件似乎有一個以上的<Matrix> </Matrix>集。爲了使所有這些工作,我修剪了文件,使其只包含一個數據集。否則,即使在翻轉之後,您的x輸入數據也不會嚴格增加,您將不得不進行排序。

+0

謝謝..非常感謝..scipy.interpolate工作,我得到了預期的結果。 – caty