Skip to content

A pure C++ implementation of the lowess algorithm using templates

License

Notifications You must be signed in to change notification settings

zdforient/CppLowess

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C++ lowess

A pure C++ implementation of the lowess algorithm. For more information, see the following publication:

Cleveland, W. S. (1981) LOWESS: A program for smoothing scatterplots by robust locally weighted regression. The American Statistician 35, 54.

In short, the algorithm performs locally-weighted polynomial regression in two dimensions, which leads to a smoothing of the data. This is useful in the presence of noise in the data.

The algorithm uses a weighted regression of the closest points around x to make a prediction of the y-value at the position x. To speed up the calculation, the regression is only calculated at a subset of the points.

Installation

The algorithm is contained in a single header file in include/CppLowess/Lowess.h and can be included directly in your C++ project. You can then instantiate an object of type TemplatedLowess to call the lowess function. The template parameter are the container and the value type used:

CppLowess::TemplatedLowess< std::vector<double>, double > dlowess;
CppLowess::TemplatedLowess< std::vector<float>, float >  flowess;
CppLowess::TemplatedLowess< TestContainer, double > testlowess;

here, STL containers as well as compatible classes can be used as template arguments.

Running tests

To build and run the tests, you can do the following after download

cmake .
make
./testLowess

Python bindings

The folder src/python contains Python bindings to the C++ code. To build and test them, please go to this folder and run

python setup.py build_ext --inplace
python nosetests testLowess.py 

this has been tested with Python version 2.7 and 3.2. It requires the Python development headers as well as Cython.

Licence

The code is available under the 3 clause BSD licence, see the LICENCE file

About

A pure C++ implementation of the lowess algorithm using templates

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 75.0%
  • Python 23.2%
  • CMake 1.8%