- Notifications
You must be signed in to change notification settings - Fork30
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
or Poetry:
poetry add csaps
The module depends only on NumPy and SciPy. Python 3.10 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 Poetry to manage the project:
git clone https://github.com/espdev/csaps.gitcd csapspoetry install -E docs
Also, install pre-commit hooks:
poetry run pre-commit install
We use pytest for testing and ruff/mypy for linting.Usepoethepoet
to run tests and linters:
poetry run poe testpoetry run poe check
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)
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors4
Uh oh!
There was an error while loading.Please reload this page.