Hey all—
I’m building a KDTree using NearestNeighbors.jl like this:
using StaticArrays, NearestNeighbors
pts = [SVector{2, Float64}(randn(2)) for _ in 1:1024]
tree = KDTree(pts, leafsize=25)
and I’m trying to find the correct way to get information about what indices of tree.data
are in leaf node j
. In this example there are 41 nodes, and I’d love to have some vector leaf_indices
such that leaf_indices[j]
is a Vector{Int64}
of length 25, or of course some other representation of the same information. I think that indices 1:25
are leaf node 1, 26:50
are in leaf node 2, and so on, but I’m not completely certain.
If that’s not right: I see that there are some internal functions for getting the indices of the (re-ordered) data based on the index of a leaf node, but I’m having trouble figuring out what the indices for the leaf nodes are. NearestNeighbors.isleaf
just checks if an index is larger than the number of non-leaf nodes (which in this case is 40), but there’s something I’m not understanding because NearestNeighbors.get_leaf_range(tree.tree_data, 41)
is 450:474
, and the ranges only increase as I increase the argument. No integer argument here gives me 1:25
, for example. So I’m clearly not understanding the design here.
Can anybody help me understand the right way to extract this information?