2011-08-05 8 views
3

2つのグリッド間の補間に苦労しています。Scipy - 1つの不規則なグリッドから別の不規則な間隔を置いたグリッドへのデータ補間

私は2つの異なる2Dグリッドを持っています。そのうちのノードポイントはX座標とY座標で定義されています。グリッド自体は長方形ではなく、多少の平行四辺形を形成する(したがって、(i、j)のX座標は(i、j + 1)と同じではなく、(i、j)のY座標は(i + 1、j)のY座標とは異なる 両方のグリッドは37 * 5の形をしており、それらはほぼ完全に重複しています。

最初のグリッドでは、X座標、座標値と圧力値を入力します。この第1グリッドの圧力分布を第2グリッド上で補間したいと思います(XとYは各点で知られています)。

私はさまざまな補間方法を試みましたが、 interp2dまたはgriddataとしての関数は、次のように必要です。 1D配列を入力しますが、これを行うと、補間された解は間違っています(たとえ元のグリッドから元のグリッドの圧力値を再び補間しても、新しい圧力値は元の値から数マイル離れています)。

私が使用する異なる不規則グリッド上の1D補間のため

:私はgriddataを使用する方が簡単だろうと思っ

def interpolate(X, Y, xNew): 
    if xNew<X[0]: 
     print 'Interp Warning :', xNew,'is under the interval [',X[0],',',X[-1],']' 
     yNew = Y[0] 
    elif xNew>X[-1]: 
     print 'Interp Warning :', xNew,'is above the interval [',X[0],',',X[-1],']' 
     yNew = Y[-1] 
    elif xNew == X[-1] : yNew = Y[-1] 
    else: 
     ind = numpy.argmax(numpy.bitwise_and(X[:-1]<=xNew,X[1:]>xNew)) 
     yNew = Y[ind] + ((xNew-X[ind])/(X[ind+1]-X[ind]))*(Y[ind+1]-Y[ind]) 

    return yNew 

が、2D用。誰かが私の入力がメッシュとデータの2D配列である補間の経験がありますか?

+0

'griddata'は入力配列を' ravel'するだけです。あなたはスクリーンショットを使ってグリッドデータがどのように失敗しているかを記述できますか? – keflavich

答えて

1

interp2dをもう一度見てください。 http://docs.scipy.org/scipy/docs/scipy.interpolate.interpolate.interp2d/#scipy-interpolate-interp2d

「パラメータ」の下の「x、y」セクションの2番目の例に注意してください。 'x'と 'y'は緩やかな意味では1次元ですが、配列をフラットにすることができます。

すると、このようなものになるはずです。

f = scipy.interpolate.interp2d([0.25, 0.5, 0.27, 0.58], [0.4, 0.8, 0.42,0.83], [3, 4, 5, 6]) 

znew = f(.25,.4) 

print znew 
[ 3.] 

znew = f(.26,.41) # midway between (0.25,0.4,3) and (0.27,0.42,5) 

print znew 
[ 4.01945345]  # Should be 4 - close enough? 

I「)は(F」あなたはフラット化「xnewを」と「ynew」配列を渡すことができると思っているだろうが、私は仕事にそれを得ることができませんでした。 'f()'関数は行、列の構文を受け入れますが、これはあなたには役に立ちません。 'f()'のこの制限のために、 'znew'をループの一部として評価する必要があります。そのためにはnditerを調べる必要があります。 '(xnew、ynew)'が '(x、y)'ドメインの外にあるときに、あなたが望むことを実行するようにしてください。

関連する問題