- Notifications
You must be signed in to change notification settings - Fork29
Cubic spline approximation (smoothing)
License
espdev/csaps
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
csaps is a Python package for univariate, multivariate and n-dimensional grid data approximation using cubic smoothing splines.The package can be useful in practical engineering tasks for data approximation and smoothing.
Use pip for installing:
pip install -U csaps
The module depends only on NumPy and SciPy. Python 3.9 or above is supported.
Here is a couple of examples of smoothing data.
An univariate data smoothing:
importnumpyasnpimportmatplotlib.pyplotaspltfromcsapsimportcsapsnp.random.seed(1234)x=np.linspace(-5.,5.,25)y=np.exp(-(x/2.5)**2)+ (np.random.rand(25)-0.2)*0.3xs=np.linspace(x[0],x[-1],150)ys=csaps(x,y,xs,smooth=0.85)plt.plot(x,y,'o',xs,ys,'-')plt.show()
A surface data smoothing:
importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dfromcsapsimportcsapsnp.random.seed(1234)xdata= [np.linspace(-3,3,41),np.linspace(-3.5,3.5,31)]i,j=np.meshgrid(*xdata,indexing='ij')ydata= (3* (1-j)**2.*np.exp(-(j**2)- (i+1)**2)-10* (j/5-j**3-i**5)*np.exp(-j**2-i**2)-1/3*np.exp(-(j+1)**2-i**2))ydata=ydata+ (np.random.randn(*ydata.shape)*0.75)ydata_s=csaps(xdata,ydata,xdata,smooth=0.988)fig=plt.figure(figsize=(7,4.5))ax=fig.add_subplot(111,projection='3d')ax.set_facecolor('none')c= [s['color']forsinplt.rcParams['axes.prop_cycle']]ax.plot_wireframe(j,i,ydata,linewidths=0.5,color=c[0],alpha=0.5)ax.scatter(j,i,ydata,s=10,c=c[0],alpha=0.5)ax.plot_surface(j,i,ydata_s,color=c[1],linewidth=0,alpha=1.0)ax.view_init(elev=9.,azim=290)plt.show()
More examples of usage and the full documentation can be found athttps://csaps.readthedocs.io.
We use pytest for testing.
cd /path/to/csaps/project/directorypip install -e .[tests]pytest
csaps Python package is inspired by MATLABCSAPS function that is an implementation ofFortran routine SMOOTH fromPGS (originally written by Carl de Boor).
Also the algothithm implementation in other languages:
- csaps-rs Rust ndarray/sprs based implementation
- csaps-cpp C++11 Eigen based implementation (incomplete)
C. de Boor, A Practical Guide to Splines, Springer-Verlag, 1978.
About
Cubic spline approximation (smoothing)