[−][src]Struct ball_tree::BallTree
A BallTree
is a space-partitioning data-structure that allows for finding
nearest neighbors in logarithmic time.
It does this by partitioning data into a series of nested bounding spheres ("balls" in the literature). Spheres are used because it is trivial to compute the distance between a point and a sphere (distance to the sphere's center minus thte radius). The key observation is that a potential neighbor is necessarily closer than all neighbors that are located inside of a bounding sphere that is farther than the aforementioned neighbor.
Graphically:
A -
| ---- distance(A, B) = 4
| - B distance(A, S) = 6
|
|
| S
--------
/ G \
/ C \
| D |
| F |
\ E /
\_________/
In the diagram, A
is closer to B
than to S
, and because S
bounds
C
, D
, E
, F
, and G
, it can be determined that A
it is necessarily
closer to B
than the other points without even computing exact distances
to them.
Ball trees are most commonly used as a form of predictive model where the
points are features and each point is associated with a value or label. Thus,
This implementation allows the user to associate a value with each point. If
this functionality is unneeded, ()
can be used as a value.
This implementation returns the nearest neighbors, their distances, and their associated values. Returning the distances allows the user to perform some sort of weighted interpolation of the neighbors for predictive purposes.
Methods
impl<P: Point, V> BallTree<P, V>
[src]
pub fn new(points: Vec<P>, values: Vec<V>) -> Self
[src]
Construct this BallTree
. Construction is somewhat expensive, so BallTree
s
are best constructed once and then used repeatedly.
panic
if points.len() != values.len()
pub fn nn<'a>(
&'a self,
point: &'a P
) -> impl Iterator<Item = (&'a P, f64, &'a V)> + 'a
[src]
&'a self,
point: &'a P
) -> impl Iterator<Item = (&'a P, f64, &'a V)> + 'a
Given a point
, return an Iterator
that yields neighbors from closest to
farthest. To get the K nearest neighbors, simply take
K from the iterator.
The neighbor, its distance, and associated value is returned.
pub fn nn_within<'a>(
&'a self,
point: &'a P,
max_radius: f64
) -> impl Iterator<Item = (&'a P, f64, &'a V)> + 'a
[src]
&'a self,
point: &'a P,
max_radius: f64
) -> impl Iterator<Item = (&'a P, f64, &'a V)> + 'a
The same as nn
but only consider neighbors whose distance is <= max_radius
Auto Trait Implementations
impl<P, V> Send for BallTree<P, V> where
P: Send,
V: Send,
P: Send,
V: Send,
impl<P, V> Sync for BallTree<P, V> where
P: Sync,
V: Sync,
P: Sync,
V: Sync,
Blanket Implementations
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,