#最近邻搜索 #最近邻 #KNN #搜索索引 #数据集 #高维 #批量加载

srtree

Rust 语言实现的 SR-Tree:高维最近邻搜索索引

3 个不稳定版本

0.2.1 2023 年 6 月 21 日
0.2.0 2023 年 5 月 31 日
0.1.0 2023 年 5 月 16 日

#1321 in 算法

Download history 30/week @ 2024-03-10 2/week @ 2024-03-17 45/week @ 2024-03-24 31/week @ 2024-03-31 1/week @ 2024-04-07 1/week @ 2024-04-21 5/week @ 2024-05-05 7/week @ 2024-05-19 14/week @ 2024-05-26 20/week @ 2024-06-02 4/week @ 2024-06-09 10/week @ 2024-06-16 19/week @ 2024-06-23

56 每月下载量

Apache-2.0

43KB
1K SLoC

GitHub Workflow Status crates.io

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