Skip to content
A comparison of various moving window median algorithms
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
roly
.gitignore
README.rst

README.rst

Roly

A comparison of various moving window median algorithms and implementations.

Roly current contains three moving window median algorithms:

  • Python "for loop"
  • Linked list written in C and wrapped in Cython
  • Double heap (3 implementations) written in C and wrapped in Cython

So far all the moving window functions in roly calculate the median of a 1d window, not 2d is often done in image work.

The roly project is discussed on the Bottleneck mailing list: http://groups.google.com/group/bottle-neck

Install

You'll need to install Cython. Then clone or download roly. Then make:

$ cd roly/roly
$ make all

Example

Let's find the moving window median of a 1d array using the linked list and double heap methods. First create a numpy array:

>>> import roly
>>> import numpy as np
>>> a = np.random.rand(5)
>>> a
array([ 0.4645463 ,  0.44380489,  0.31820587,  0.6821211 ,  0.4912904 ])

Then try the linked list method:

>>> roly.linkedlist.move_median(a, 3)
array([        nan,         nan,  0.44380489,  0.44380489,  0.4912904 ])

And the double heap method:

>>> roly.doubleheap.move_median(a, 3)
array([        nan,         nan,  0.44380489,  0.44380489,  0.4912904 ])

The are three implementations of the double heap method (the first one contains a bug):

>>> roly.doubleheap.move_median
>>> roly,doubleheap2.move_median
>>> roly.doubleheap3.move_median

roly also has a slow (python for loop) reference inplementation which is useful for unit testing:

>>> roly.slow.move_median(a, 3)
array([        nan,         nan,  0.44380489,  0.44380489,  0.4912904 ])

Performance

Roly contain a benchmark. To run it:

$ cd roly/roly
$ python run_tests.py

Roly license

Roly contains code from other projects, the license for which should appear in the corresponding code files.

You can’t perform that action at this time.