7个稳定版本
1.6.307 | 2020年5月7日 |
---|---|
1.6.306 | 2020年5月3日 |
1.6.305 | 2020年5月1日 |
1.6.301 | 2020年4月30日 |
#323 in 机器学习
每月21次下载
18KB
375 代码行
Faiss for rust
本项目为Faiss(先进的向量搜索和聚类库)提供Rust绑定。
[dependencies]
faiss4rs = "1.6.306"
- 1.6.3是faiss版本,最后的xx是本项目版本
您需要在您的编译器中编译faiss,并将其设置为 /usr/local/lib
或 /usr/lib
或环境变量 LD_LIBRARY_PATH
此库可在 'macos' 或 linux
上使用,但不支持 windows
示例
use rand;
let dimension: usize = 128;
let index_size = 100000;
let train_size = 10000;
let mut conf = Config::new(dimension as i32);
conf.path = String::from("temp/large.index");
conf.description = String::from("PCA32,IVF1,PQ8");
let index = Index::new(conf);
assert!(index.dimension() == dimension as i32);
println!("========= dimension {}", index.dimension());
println!("========= test train");
let mut vec = Vec::with_capacity(dimension * train_size);
for _ in 0..vec.capacity() {
let v = rand::random::<f32>();
vec.push(v);
}
assert!(!index.is_trained());
println!("is_trained:{}", index.is_trained());
index.train(&vec).unwrap();
println!("========= test add with id");
for i in 0..200 {
let mut vec = Vec::with_capacity(dimension);
for _i in 0..vec.capacity() {
vec.push(rand::random::<f32>());
}
index.add_with_id(i * 9, &vec).unwrap();
}
println!("========= test add with ids");
let mut vec = Vec::with_capacity(dimension * index_size);
let mut ids: Vec<i64> = Vec::with_capacity(vec.capacity());
for _i in 0..vec.capacity() {
vec.push(rand::random::<f32>());
}
for i in 0..index_size {
ids.push(i as i64);
}
// index.add_with_ids(&ids, &vec).unwrap();
println!("========= test search");
let mut vec = Vec::with_capacity(dimension);
for _i in 0..vec.capacity() {
vec.push(rand::random::<f32>());
}
let result = index.search(2000, 1, &vec);
println!("search result : {:?}", result);
assert!(index.is_trained());
println!("is_trained:{}", index.is_trained());
assert_eq!(200, index.count());
println!("all count:{}", index.count());
println!("max_id:{}", index.max_id());
std::fs::create_dir_all("temp");
//to persistence index
index.write_index();
drop(index);
let mut conf = Config::new(dimension as i32);
conf.path = String::from("temp/large.index");
let index = Index::open_or_create(conf);
println!("========= test search");
let mut vec = Vec::with_capacity(dimension);
for _i in 0..vec.capacity() {
vec.push(rand::random::<f32>());
}
let result = index.search(2000, 1, &vec);
println!("search result : {:?}", result);
assert!(index.is_trained());
println!("is_trained:{}", index.is_trained());
assert_eq!(200, index.count());
println!("all count:{}", index.count());
println!("max_id:{}", index.max_id());
依赖项
~1-2MB
~37K SLoC