2017-03-08 13 views
0

私は、圧力(p)とvmrのデータポイントを持っています。 私は.Iは、np.interpを使用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) 

しかし、私は「YI」を印刷しようとしたとき、それが唯一の値(すなわち、VMR値)を印刷している別の圧力グリッドのVMR値を見つけたい(pressure_grid) "pressure_grid"の最後の値に対応します。すべての反復で同じ値を出力しています pとvmrを印刷しようとしましたが、すべてがうまくいくようです。なぜこれが起こっているのか理解できません... 私はこれに慣れています........助けてください

これは私のファイルが最初の列-pと2番目の列-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より大きい値を持っています。私はscipy.interpolateを使ってみましたが、それも動作していません。誰かがこれを行うための他の方法を教えてもらえますか? – caty

答えて

1

あなたのコードには2つの問題があります。最初のxyは、forループの繰り返しごとに上書きされます。つまり、xyは、補間の要素が1つだけ含まれています。ここで

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

、私は看板未満で始まる行をスキップするように指定している:これを修正するには、単に、ちょうどnumpy.loadtxt()を使用しループの外xyリストを定義し、forループに追加、またはそれ以上の可能性実際のデータのみを取得します。

第2に、numpy.interpを実際に動作させるには、x座標をincreasing sequenceにする必要があります。 (メモを確認してください)。

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

また、あなただけのオリジナル、unflippedデータにscipy.interpolateパッケージを使用することができます:あなたはそれをロードした後、データを反転する必要がありますので、あなたのデータの場合、xは、減少列です。

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

注:これは、あなたの入力領域で囲まれていないデータを推定することを可能にする追加の利点を持っているあなたの入力ファイルには、複数の<Matrix> </Matrix>セットを持っているように見えます。これをすべて動作させるには、ファイルをトリミングして1つのデータセットのみを含むようにしました。それ以外の場合は、反転した後もx入力データは厳密には増加しません。ソートする必要があります。

+0

ありがとうございました。ありがとうございました.scipy.interpolateがうまくいきました。希望の結果が得られました。 – caty

関連する問題