给定二维平面中的一系列点[(x0,y0), (x1,y1), ...]
,我想找到一条穿过这些点的样条曲线。
1D 样条中的类scipy.interpolate
需要增加x
,因为这些x
坐标的列表不需要增加(即曲线不是函数,f(x)=y
而是参数化曲线)。不幸的是,它都不是一个函数y
(否则通过切换 x 和 y 坐标问题将很容易解决)。
我尝试过使用单变量插值类,但这并没有达到预期的效果。我怎样才能用它scipy.interpolate
来计算这条样条曲线?
给定二维平面中的一系列点[(x0,y0), (x1,y1), ...]
,我想找到一条穿过这些点的样条曲线。
1D 样条中的类scipy.interpolate
需要增加x
,因为这些x
坐标的列表不需要增加(即曲线不是函数,f(x)=y
而是参数化曲线)。不幸的是,它都不是一个函数y
(否则通过切换 x 和 y 坐标问题将很容易解决)。
我尝试过使用单变量插值类,但这并没有达到预期的效果。我怎样才能用它scipy.interpolate
来计算这条样条曲线?
您需要重新考虑如何看待这个问题:实际上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])