scikits.ann

HomePage: http://scipy.org/scipy/scikits/wiki/AnnWrapper

Author: Barry Wark

Download: https://pypi.python.org/packages/source/s/scikits.ann/scikits.ann-0.2.dev-r803.tar.gz

        The ANN module provides a numpy-compatible python wrapper around the 
Approximate Nearest Neighbor library (http://www.cs.umd.edu/~mount/ANN/).

* Installation *
Download and build the Approximate Nearest Neighbor library. Modify the ANN section of 
site.cfg so that ANN_ROOT is the path to the root of the Approximate Nearest Neighbor 
library include/lib tree.
If /usr/local/include contains the ANN/ include directory and /usr/local/lib contains 
libANN.a, then
ANN_ROOT = /usr/local

Run ::

    python setup.py build_ext --inplace build test
    sudo python setup.py install

from within the source directory.

* Usage *
scikits.ann exposes a single class, kdtree that wraps the Approximate Nearest Neighbor 
library's kd-tree implementation. kdtree has a single (non-constructor) method, knn that 
finds the indecies (of the points used to construct the kdtree) of the k-nearest neighbors
 and the squared distances to those points. A little example will probably be much 
 more enlightening::
    >>> import scikits.ann as ann
        
    >>> import numpy as np

    >>> k=ann.kdtree(np.array([[0.,0],[1,0],[1.5,2]]))

    >>> k.knn([0,.2],1)
    (array([[0]]), array([[ 0.04]]))

    >>> k.knn([0,.2],2)
    (array([[0, 1]]), array([[ 0.04,  1.04]]))

    >>> k.knn([[0,.2],[.1,2],[3,1],[0,0]],2)
    (array([[0, 1],
           [2, 0],
           [2, 1],
           [1, 2]]), array([[ 0.04,  1.04],
           [ 1.96,  4.01],
           [ 3.25,  5.  ],
           [ 1.  ,  6.25]]))

    >>> k.knn([[0,.2],[.1,2],[3,1],[0,0]],3)
    (array([[ 0,  1,  2],
           [ 2,  0,  1],
           [ 2,  1,  0],
           [ 1,  2, -1]]), array([[  4.00000000e-002,   1.04000000e+000,   5.49000000e+000],
           [  1.96000000e+000,   4.01000000e+000,   4.81000000e+000],
           [  3.25000000e+000,   5.00000000e+000,   1.00000000e+001],
           [  1.00000000e+000,   6.25000000e+000,   1.79769313e+308]]))