#最近邻搜索 #邻居 # #最近 #搜索 #地理

kdtree

Rust中的多维树,用于快速地理空间索引和最近邻查找

13个版本 (7个重大更改)

使用旧的Rust 2015

0.7.0 2022年12月16日
0.6.0 2019年10月28日
0.5.1 2018年4月24日
0.4.0 2017年11月28日
0.2.1 2015年8月18日

#126 in 算法

Download history 8574/week @ 2024-03-14 8191/week @ 2024-03-21 8075/week @ 2024-03-28 7670/week @ 2024-04-04 9833/week @ 2024-04-11 8394/week @ 2024-04-18 9325/week @ 2024-04-25 8212/week @ 2024-05-02 11237/week @ 2024-05-09 10696/week @ 2024-05-16 8122/week @ 2024-05-23 10678/week @ 2024-05-30 10332/week @ 2024-06-06 9077/week @ 2024-06-13 9504/week @ 2024-06-20 6742/week @ 2024-06-27

每月38,068次下载
用于 47 个crate(18个直接使用)

MIT/Apache

30KB
629

kdtree rust crates.io docs license

Rust中的多维树,用于快速地理空间索引和最近邻查找

用法

kdtree 添加到 Cargo.toml

[dependencies]
kdtree = "0.7.0"

向kdtree添加点,并使用距离函数查询最近的n个点

use kdtree::KdTree;
use kdtree::ErrorKind;
use kdtree::distance::squared_euclidean;

let a: ([f64; 2], usize) = ([0f64, 0f64], 0);
let b: ([f64; 2], usize) = ([1f64, 1f64], 1);
let c: ([f64; 2], usize) = ([2f64, 2f64], 2);
let d: ([f64; 2], usize) = ([3f64, 3f64], 3);

let dimensions = 2;
let mut kdtree = KdTree::new(dimensions);

kdtree.add(&a.0, a.1).unwrap();
kdtree.add(&b.0, b.1).unwrap();
kdtree.add(&c.0, c.1).unwrap();
kdtree.add(&d.0, d.1).unwrap();

assert_eq!(kdtree.size(), 4);
assert_eq!(
    kdtree.nearest(&a.0, 0, &squared_euclidean).unwrap(),
    vec![]
);
assert_eq!(
    kdtree.nearest(&a.0, 1, &squared_euclidean).unwrap(),
    vec![(0f64, &0)]
);
assert_eq!(
    kdtree.nearest(&a.0, 2, &squared_euclidean).unwrap(),
    vec![(0f64, &0), (2f64, &1)]
);
assert_eq!(
    kdtree.nearest(&a.0, 3, &squared_euclidean).unwrap(),
    vec![(0f64, &0), (2f64, &1), (8f64, &2)]
);
assert_eq!(
    kdtree.nearest(&a.0, 4, &squared_euclidean).unwrap(),
    vec![(0f64, &0), (2f64, &1), (8f64, &2), (18f64, &3)]
);
assert_eq!(
    kdtree.nearest(&a.0, 5, &squared_euclidean).unwrap(),
    vec![(0f64, &0), (2f64, &1), (8f64, &2), (18f64, &3)]
);
assert_eq!(
    kdtree.nearest(&b.0, 4, &squared_euclidean).unwrap(),
    vec![(0f64, &1), (2f64, &0), (2f64, &2), (8f64, &3)]
);

基准测试

cargo bench 在2.3 GHz Intel i5-7360U上运行

cargo bench
     Running target/release/deps/bench-9e622e6a4ed9b92a

running 2 tests
test bench_add_to_kdtree_with_1k_3d_points       ... bench:         106 ns/iter (+/- 25)
test bench_nearest_from_kdtree_with_1k_3d_points ... bench:       1,237 ns/iter (+/- 266)

test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured; 0 filtered out

感谢 Eh2406 进行各种修复和性能改进。

许可证

许可协议下任选其一

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的任何有意提交的工作,都应如上所述双许可,不附加任何额外条款或条件。

依赖项

~0.4–1MB
~22K SLoC