3个版本
0.1.2 | 2021年10月21日 |
---|---|
0.1.1 | 2021年10月2日 |
0.1.0 | 2021年9月29日 |
在#nearest中排名11
18KB
280 行
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