编辑: 使用 Numpy 的解决方案会很好,我以前在安装它们时遇到了问题,但我现在在某些系统上安装了 numpy
像http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference这样的东西会很棒。
我有一组 x,y 数据点,我正在寻找一种方法来绘制数据点之间的平滑路径。我需要访问实际点,所以贝塞尔曲线不会削减它。
提前致谢
编辑: 使用 Numpy 的解决方案会很好,我以前在安装它们时遇到了问题,但我现在在某些系统上安装了 numpy
像http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference这样的东西会很棒。
我有一组 x,y 数据点,我正在寻找一种方法来绘制数据点之间的平滑路径。我需要访问实际点,所以贝塞尔曲线不会削减它。
提前致谢
Scipy 多项式插值模块是相当独立的。如果确实需要避免依赖,可以将文件复制到自己的项目中:
https://github.com/scipy/scipy/blob/master/scipy/interpolate/polyint.py
这splmake/spleval
对样条插值例程也是如此:
https://github.com/scipy/scipy/blob/master/scipy/interpolate/interpolate.py
对于 python 中的数值计算,numpy 是难以避免的。你应该尝试scipy.interpolate
:
并寻找参数样条。从链接:
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
t = np.arange(0,1.1,.1)
x = np.sin(2*np.pi*t)
y = np.cos(2*np.pi*t)
tck,u = interpolate.splprep([x,y],s=0)
unew = np.arange(0,1.01,0.01)
out = interpolate.splev(unew,tck)
plt.figure()
plt.plot(x,y,'x',out[0],out[1],np.sin(2*np.pi*unew),np.cos(2*np.pi*unew),x,y,'b')
plt.legend(['Linear','Cubic Spline', 'True'])
plt.axis([-1.05,1.05,-1.05,1.05])
plt.title('Spline of parametrically-defined curve')
plt.show()