Skip to main content

Cubic spline approximation (smoothing)

Project description

CSAPS: Cubic spline approximation (smoothing)

PyPI version Documentation Status Build status Coverage Status Supported Python versions License

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()

univariate

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()

surface

Documentation

More examples of usage and the full documentation can be found at ReadTheDocs.

https://csaps.readthedocs.io

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

MIT

Changelog

v0.9.0

  • Drop support of Python 3.5
  • weights, smooth and axis arguments in csaps function are keyword-only now
  • UnivariateCubicSmoothingSpline and MultivariateCubicSmoothingSpline classes are deprecated and will be removed in 1.0.0 version. Use CubicSmoothingSpline 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

csaps-0.9.0.tar.gz (15.6 kB view hashes)

Uploaded Source

Built Distribution

csaps-0.9.0-py3-none-any.whl (22.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page