Skip to main content

Cubic spline approximation (smoothing)

Project description

csaps

PyPI version Supported Python versions GitHub Actions (Tests) Documentation Status Coverage Status License

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.

Installing

Use pip for installing:

pip install -U csaps

The module depends only on NumPy and SciPy. Python 3.6 or above is supported.

Simple Examples

Here is 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 https://csaps.readthedocs.io.

Testing

We use pytest for testing.

cd /path/to/csaps/project/directory
pip install -e .[tests]
pytest

Algorithm and Implementation

csaps Python package is inspired by MATLAB CSAPS function that is an implementation of Fortran routine SMOOTH from PGS (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)

References

C. de Boor, A Practical Guide to Splines, Springer-Verlag, 1978.

License

MIT

Changelog

v1.0.4 (04.05.2021)

  • Bump numpy dependency version

v1.0.3 (01.01.2021)

  • Bump scipy dependency version
  • Bump sphinx dependency version and use m2r2 sphinx extension instead of m2r
  • Add Python 3.9 to classifiers list and to Travis CI
  • Set development status classifier to "5 - Production/Stable"
  • Happy New Year!

v1.0.2 (19.07.2020)

  • Fix using 'nu' argument when n-d grid spline evaluating #32

v1.0.1 (19.07.2020)

  • Fix n-d grid spline evaluating performance regression #31

v1.0.0 (11.07.2020)

  • Use PPoly and NdPPoly base classes from SciPy interpolate module for SplinePPForm and NdGridSplinePPForm respectively.
  • Remove deprecated classes UnivariateCubicSmoothingSpline and MultivariateCubicSmoothingSpline
  • Update the documentation

Notes

In this release the spline representation (the array of spline coefficients) has been changed according to PPoly/NdPPoly. See SciPy PPoly and NdPPoly documentation for details.

v0.11.0 (28.03.2020)

  • Internal re-design SplinePPForm and NdGridSplinePPForm classes #17:
    • Remove shape and axis properties and reshaping data in these classes
    • NdGridSplinePPForm coefficients array for 1D grid now is 1-d instead of 2-d
  • Refactoring the code and decrease memory consumption
  • Add overload type-hints for csaps function signatures

v0.10.1 (19.03.2020)

  • Fix call of numpy.pad function for numpy <1.17 #15

v0.10.0 (18.02.2020)

  • 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 to SplinePPForm
  • Fix issues with the smoothing factor in nd-grid case: inverted ordering and unnable to use 0.0 value
  • Update documentation

v0.9.0 (21.01.2020)

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

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

  • Add Generic-based type-hints and mypy-compatibility

v0.6.1 (13.09.2019)

  • A slight refactoring and extra data copies removing

v0.6.0 (12.09.2019)

  • Add "axis" parameter for univariate/multivariate cases

v0.5.0 (10.06.2019)

  • Reorganize the project to package-based structure
  • Add the interface class for all smoothing spline classes

v0.4.2 (07.09.2019)

  • FIX: "smooth" value is 0.0 was not used

v0.4.1 (30.05.2019)

  • 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-1.0.4.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

csaps-1.0.4-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file csaps-1.0.4.tar.gz.

File metadata

  • Download URL: csaps-1.0.4.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/43.0.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.6

File hashes

Hashes for csaps-1.0.4.tar.gz
Algorithm Hash digest
SHA256 30f33399fb1cabe8d68dfc0991fa21d650281c39a10d329514854d3dfe6901ba
MD5 82849e665c1eb151d96c4b68393d2102
BLAKE2b-256 d7eb1e5ac2efe42b25d2f4e4e7dced2ae6a42ddff75454278e321d3dbe5f98d6

See more details on using hashes here.

File details

Details for the file csaps-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: csaps-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/43.0.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.6

File hashes

Hashes for csaps-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c8b4651337110b344828a0c7cdff235f34e15f58657156bb687c6e8253269350
MD5 9edcb1fdffbe366205153fe2fa735d11
BLAKE2b-256 f0850b7e25308ac7b6117a792271d63d64f92fe2e192f293d2973eda517a60a8

See more details on using hashes here.

Supported by

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