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

Peter Tittmann ptittmann at gmail.com
Mon Oct 11 14:08:04 EDT 2010


On Thu, Oct 7, 2010 at 6:43 PM, Anne Archibald
<aarchiba at physics.mcgill.ca> wrote:
> 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
>>
>
Thanks all.

Would it be possible to search the cKDTree with the python
query_ball_tree? My application could use the efficiency of the
cKDTree  but I'm not clear how I query distance instead of # of points
using the existing methods in cKDTree.

gratefully,

Peter



More information about the SciPy-User mailing list