0

给定二维平面中的一系列点[(x0,y0), (x1,y1), ...],我想找到一条穿过这些点的样条曲线。

1D 样条中的类scipy.interpolate需要增加x,因为这些x坐标的列表不需要增加(即曲线不是函数,f(x)=y而是参数化曲线)。不幸的是,它都不是一个函数y(否则通过切换 x 和 y 坐标问题将很容易解决)。

我尝试过使用单变量插值类,但这并没有达到预期的效果。我怎样才能用它scipy.interpolate来计算这条样条曲线?

4

1 回答 1

4

您需要重新考虑如何看待这个问题:实际上x是曲线的参数化(通常表示t时间)并且yx,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 回答