| Crates.io | diskann_rust-vector |
| lib.rs | diskann_rust-vector |
| version | 0.1.0 |
| created_at | 2025-09-20 08:45:47.479451+00 |
| updated_at | 2025-09-20 08:45:47.479451+00 |
| description | Vector operations and distance metrics for DiskANN, supporting f32, f16, and various distance functions |
| homepage | |
| repository | https://github.com/jianshu93/diskann_rust-vector |
| max_upload_size | |
| id | 1847542 |
| size | 58,030 |
A high-performance vector operations library providing distance metrics, data types, and utilities for vector computations in Rust.
The Vector library provides essential functionality for vector operations, including distance metrics, data types, and utilities used by the DiskANN project. It's designed for high-performance vector computations with support for different numeric types and distance functions.
use diskann_vector::{Metric, distance::FullPrecisionDistance};
let v1 = [1.0f32, 2.0, 3.0];
let v2 = [4.0f32, 5.0, 6.0];
let d = <[f32; 3] as FullPrecisionDistance<f32, 3>>::distance_compare(&v1, &v2, Metric::L2);
// Calculates: sqrt((4-1)² + (5-2)² + (6-3)²)
let v1 = [1.0, 2.0, 3.0];
let v2 = [4.0, 5.0, 6.0];
let d_cos = <[f32; 3] as FullPrecisionDistance<f32, 3>>
::distance_compare(&v1, &v2, Metric::Cosine);
let a: [u32; 4] = [0,1,2,3];
let b: [u32; 4] = [0,1,5,3];
let d = <[u32; 4] as FullPrecisionDistance<u32, 4>>::distance_compare(&a, &b, Metric::Hamming);
f32 - 32-bit floating point (most common)
f16 - 16-bit floating point (memory efficient)
f64 - 64-bit floating point (high precision)
use vector::{FullPrecisionDistance, Metric};
// Implement custom distance for your type
impl FullPrecisionDistance<f32, 128> for [f32; 128] {
fn l2_distance(&self, other: &[f32; 128]) -> f32 {
self.iter()
.zip(other.iter())
.map(|(a, b)| (a - b).powi(2))
.sum::<f32>()
.sqrt()
}
}
The Vector library is designed to work seamlessly with DiskANN:
use diskann::{IndexBuilder, Metric};
use diskann_vector::FullPrecisionDistance;
// Create index with vector types
let mut index = IndexBuilder::new()
.with_dimension(128)
.with_metric(Metric::L2)
.build_in_memory::<f32>()?;
// Insert vectors
let vectors: Vec<[f32; 128]> = vec![/* your vectors */];
index.insert_batch(&vectors)?;
Performance comparison of different distance metrics (Intel i7-8700K):
| Metric | 128-dim | 256-dim | 512-dim | 1024-dim |
|---|---|---|---|---|
| L2 | 0.8μs | 1.2μs | 2.1μs | 4.3μs |
| Cosine | 1.1μs | 1.8μs | 3.2μs | 6.1μs |
Times are per vector pair comparison
cargo build --release
cargo test
This project is licensed under the MIT License - see the LICENSE file for details.
We welcome contributions! Please see the main README for contribution guidelines.