bbqvec 0.0.10

Scalable, embeddable, vector storage for approximate K-nearest-neighbors (AKNN)
Documentation
use rand::Rng;

use crate::{Vector, ID};

pub fn create_random_vector(dimensions: usize) -> Vector {
    let mut out = Vec::new();
    for _ in 0..dimensions {
        out.push(rand::thread_rng().gen_range(-1.0..1.0))
    }
    crate::vector::normalize(&mut out);
    out
}

pub fn create_vector_set(dimensions: usize, count: usize) -> Vec<Vector> {
    std::iter::repeat_with(|| create_random_vector(dimensions))
        .take(count)
        .collect()
}

pub trait IndexIDIterator {
    fn enumerate_ids(&self) -> impl Iterator<Item = (ID, &Vector)>;
}

impl IndexIDIterator for Vec<Vector> {
    fn enumerate_ids(&self) -> impl Iterator<Item = (ID, &Vector)> {
        self.iter().enumerate().map(|(i, v)| (i as ID, v))
    }
}