[SciPy-User] scipy.KDTree.query ball tree

Anne Archibald aarchiba at physics.mcgill.ca
Thu Oct 7 21:43:34 EDT 2010


Hi,

In your example you are having two problems. One of them is that the
python error message is confusing; this is a method intended to be
called on an existing kdtree instance, and you are calling it
directly. Some languages simply do not allow this, but python does, so
instead you get the strange "missing argument" message; this occurs
because if you don't call it on an instance, you need to supply an
instance as the normally-invisible "self" argument.

The basic problem you're having, though, is that this method is used
for a "two-tree" query: you use it when you have two kd-trees and you
want to find all the points of one that are near each point of the
other. Think of it as if query_ball were being supplied many points,
but instead of an array you're supplying them stored in a kd-tree. The
reason this exists is that there are some algorithmic shortcuts you
can take when both sets of points are stored in spatial data
structures. But unless you know you want this, this is probably not
the function you want to be using.

In fact, this is probably not just the wrong function but the wrong
kd-tree implementation; the compiled one, available as cKDTree, is
faster in almost every way; the python implementation is there because
it's more flexible (so that for example you could implement your own
algorithms that walk the trees).

Anne

On 7 October 2010 19:51, Peter Tittmann <ptittmann at gmail.com> wrote:
> I'm having some trouble understanding how this query_ball_tree method
> works. The documentation says its parameters are:
>
> other : KDTree
>    The tree containing points to search against
> r : positive float
>    The maximum distance
>
> This is immediately strange to me because it would seem that it needs
> a focal point for the search. I understand that this is a search that
> references an existing KDTree as opposed to the query_ball_tree. So i
> go forth and pass it an existing KDTree:
>
> In [53]: test=spatial.KDTree.query_ball_tree(lasKDTree, 10.)
> ------------------------------------------------------------
> Traceback (most recent call last):
>  File "<ipython console>", line 1, in <module>
> TypeError: query_ball_tree() takes at least 3 arguments (2 given)
>
> It seems that the documentation is missing a parameter. I found an
> obscure reference here:
> http://article.gmane.org/gmane.comp.python.scientific.user/25517/match=query_ball_tree
> that states the the tree should be the second argument. If someone
> could help clarify what the first argument should be I'd be grateful.
>
> Thanks!
>
> Peter
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>



More information about the SciPy-User mailing list