0

2D平面内の一連の点が与えられた場合、これらの点を通過するスプライン曲線[(x0,y0), (x1,y1), ...]を見つけたいと思います。

scipy.interpolate1Dスプラインのクラスはx、これらの座標のリストをx増やす必要がないため、増やす必要があります(つまり、曲線は関数でf(x)=yはなく、パラメータ化された曲線です)。残念ながら、どちらも関数ではありませんy(そうでない場合、x座標とy座標を切り替えることで、問題は簡単に解決されます)。

単変量補間クラスを試しましたが、これでは目的の効果が得られません。scipy.interpolateこのスプライン曲線を計算するにはどうすればよいですか?

4

1 に答える 1

4

この問題についてどのように考えるかを再考する必要があります。実際xには、曲線のパラメーター化(通常はt時間で示されます)でyあり、x,y座標です。

L = [(x0,y0), (x1,y1), ...]
X = numpy.array(L).T
# Equivalently (but less generally):
# X = [[P[0] for P in L], [ P[1] for P in L ]]

t,X = enumerate(L) # here t[0]==0 and X[0]==(x0,x1,..), X[1]==(y0,y1,..)
# or to name in a more confusing manner but match the docs: x,y = enumerate(L)

scipy.interpolate次に、次のようなさまざまな機能を使用できます。

f = scipy.interpolate.interp1d(t, X)

(0,0)たとえば、との間の直線(1,1)

f = interp1d((0,1), numpy.array([[0,0],[1,1]]).T )
#          (t0,t1)  numpy.array([[x0,y0],[[x1,y1]]).T
#          (t0,t1)              [[x0,x1],[[y0,y1]]
f(0.5) # array([ 0.5,  0.5])
于 2012-10-09T11:29:50.873 に答える