3个版本

0.1.2 2021年10月21日
0.1.1 2021年10月2日
0.1.0 2021年9月29日

#nearest中排名11

MIT许可证

18KB
280

build status License: MIT crates.io Documentation

nn-rs

nn-rs是一个用于使用nalgebra找到1维向量的最近邻的纯Rust库。

示例

您可以创建一个空的NearestNeighbour索引并向其中添加向量

use nn_rs::NearestNeighbours;
use nalgebra;

// pick a metric to use 
let metric = String::from("cosine");
// create an empty index
let mut index: NearestNeighbours = NearestNeighbours::new(metric)?;

// create some dummy vectors 
let a: nalgebra::DVector<f64> = nalgebra::dvector!(1.0, 2.0, 3.0);
let b: nalgebra::DVector<f64> = nalgebra::dvector!(7.0, 2.0, 9.0);
let c: nalgebra::DVector<f64> = nalgebra::dvector!(4.0, 2.1, 3.4);
let d: nalgebra::DVector<f64> = nalgebra::dvector!(0.9, 8.2, 4.6);

// add these dummy vectors to the index
index.add_vector(String::from("a"), a)?;
index.add_vector(String::from("b"), b)?;
index.add_vector(String::from("c"), c)?;
index.add_vector(String::from("d"), d)?;

然后可以将此保存到.nn文件中,该文件可以被重新加载

use std::path::PathBuf;

let save_path = PathBuf::from("./test.nn");
index.save(save_path)?;

let load_path = PathBuf::from("./test.nn");
let mut new_index = NearestNeighbours.load(load_path)?;

或者,您可以从json创建索引

{
    "a": [1.0, 2.0, 3.0],
    "b": [7.0, 2.0, 9.0],
    "c": [4.0, 2.1, 3.4],
    "d": [0.9, 8.2, 4.6]
}
let json_path = PathBuf::from("some.json");
let metric = String::from("cosine");
let mut index = NearestNeighbours::from_json(metric, json_path)?;

一旦您有了索引,您就可以通过向量查询来找到最近的n个向量

let query_vector: nalgebra::DVector<f64> = nalgebra::dvector!(1.0, 2.0, 3.0);
// the number of neighbours to return
let n: uszie = 1;
// find just the single nearest neighbour in the index 
let nearest_neighbour = index.query_by_vector(query_vector, n)?;

安装

将以下行添加到您的Cargo.toml文件中

[dependencies]
nn-rs = "0.1.2"

功能

🗡️🗡️ 锋利的边缘 🗡️🗡️

  • 不能保留重复的ID,如果添加了重复的ID,则会覆盖已存在的条目
  • add_vector不会检查您是否添加了相同长度的向量,当您查询时将引发错误,因此应确保所有添加的向量长度相同

依赖项

~5.5MB
~117K SLoC