Cubic spline approximation (smoothing)
Project description
CSAPS: Cubic spline approximation (smoothing)
csaps is a package for univariate, multivariate and nd-gridded data approximation using cubic smoothing splines.
Installation
Python 3.6 or above is supported.
pip install -U csaps
The module depends only on NumPy and SciPy.
Simple Examples
Here are a couple of examples of smoothing data.
An univariate data smoothing:
import numpy as np
import matplotlib.pyplot as plt
from csaps import csaps
np.random.seed(1234)
x = np.linspace(-5., 5., 25)
y = np.exp(-(x/2.5)**2) + (np.random.rand(25) - 0.2) * 0.3
xs = 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:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from csaps import csaps
np.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'] for s in plt.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()
Documentation
More examples of usage and the full documentation can be found at ReadTheDocs.
Testing
pytest, tox and Travis CI are used for testing. Please see tests.
Algorithms and implementations
csaps package is a Python modified port of MATLAB CSAPS function that is an implementation of Fortran routine SMOOTH from PGS (originally written by Carl de Boor).
csaps-cpp C++11 Eigen based implementation of the algorithm.
References
C. de Boor, A Practical Guide to Splines, Springer-Verlag, 1978.
License
Changelog
v0.10.0
- Significant performance improvements for make/evaluate splines and memory consumption optimization
- Change format for storing spline coefficients (reshape coeffs array) to improve performance
- Add shape property to
SplinePPForm
/NdGridSplinePPForm
and axis property toSplinePPForm
- Fix issues with the smoothing factor in nd-grid case: inverted ordering and unnable to use 0.0 value
- Update documentation
v0.9.0
- Drop support of Python 3.5
weights
,smooth
andaxis
arguments incsaps
function are keyword-only nowUnivariateCubicSmoothingSpline
andMultivariateCubicSmoothingSpline
classes are deprecated and will be removed in 1.0.0 version. UseCubicSmoothingSpline
instead.
v0.8.0
- Add
csaps
function that can be used as the main API - Refactor the internal structure of the package
- Add the documentation
Attention
This is the last version that supports Python 3.5. The next versions will support Python 3.6 or above.
v0.7.0
- Add Generic-based type-hints and mypy-compatibility
v0.6.1
- A slight refactoring and extra data copies removing
v0.6.0
- Add "axis" parameter for univariate/multivariate cases
v0.5.0
- Reorganize the project to package-based structure
- Add the interface class for all smoothing spline classes
v0.4.2
- FIX: "smooth" value is 0.0 was not used
v0.4.1
- First PyPI release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.