3 个不稳定版本
0.2.1 | 2023 年 6 月 21 日 |
---|---|
0.2.0 | 2023 年 5 月 31 日 |
0.1.0 | 2023 年 5 月 16 日 |
#1321 in 算法
56 每月下载量
43KB
1K SLoC
srtree
Rust 语言实现的 SR-Tree:高维聚类数据集的最近邻搜索索引,修改以支持基于方差的批量加载。此包应用了论文中提出的基本概念,原始的 C++ 版本可在此找到 此处。
示例
此示例展示了如何在欧几里得 SRTree 上查询最近邻
use srtree::SRTree;
fn main() {
let points = vec![
vec![0., 0.],
vec![1., 1.],
vec![2., 2.],
vec![3., 3.],
vec![4., 4.],
];
let tree = SRTree::euclidean(&points).expect("Failed to build SRTree");
let (indices, distances) = tree.query(&[8., 8.], 3);
println!("{indices:?}"); // [4, 3, 2] (sorted by distance)
println!("{distances:?}");
}
可以使用 Metric
特性定义其他距离度量
use srtree::{SRTree, Metric};
struct Manhattan;
impl Metric<f64> for Manhattan {
fn distance(&self, point1: &[f64], point2: &[f64]) -> f64 {
point1.iter().zip(point2).map(|(a, b)| (a - b).abs()).sum()
}
fn distance_squared(&self, _: &[f64], _: &[f64]) -> f64 {
0.
}
}
fn main() {
let points = vec![
vec![0., 0.],
vec![1., 1.],
vec![2., 2.],
vec![3., 3.],
vec![4., 4.],
];
let tree = SRTree::default(&points, Manhattan).expect("Failed to build SRTree");
let (indices, distances) = tree.query(&[8., 8.], 3);
println!("{indices:?}"); // [4, 3, 2] (sorted by distance)
println!("{distances:?}"); // [8., 10., 12.]
}
许可证
版权所有 2019-2023 EINSIS,Inc。
根据 Apache 许可证,版本 2.0(“许可证”);除非您明确声明,否则您不得使用此软件包,除非遵守许可证。
除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可证下权限和限制的特定语言,请参阅 LICENSE。
贡献
除非您明确声明,否则您有意提交以包含在您的工作中的任何贡献,根据 Apache-2.0 许可证 定义,应按上述方式许可,不附加任何额外条款或条件。
依赖项
~240KB