pub struct ScalarQuantizer { /* private fields */ }Expand description
Scalar quantization (SQ8): f32 → u8
Maps each dimension independently to [0, 255] range based on min/max values from training data. Provides 4x memory reduction with minimal quality loss.
§Example
use foxstash_core::vector::quantize::{ScalarQuantizer, Quantizer};
// Fit quantizer on training data
let training_vectors = vec![
vec![0.1, 0.5, 0.9],
vec![0.2, 0.4, 0.8],
vec![0.3, 0.6, 0.7],
];
let quantizer = ScalarQuantizer::fit(&training_vectors);
// Quantize new vectors
let query = vec![0.15, 0.45, 0.85];
let quantized = quantizer.quantize(&query);
// Compute distance efficiently
let db_vec = quantizer.quantize(&training_vectors[0]);
let distance = quantizer.distance_quantized(&quantized, &db_vec);Implementations§
Source§impl ScalarQuantizer
impl ScalarQuantizer
Sourcepub fn fit(training_vectors: &[Vec<f32>]) -> Self
pub fn fit(training_vectors: &[Vec<f32>]) -> Self
Fit quantizer parameters from training vectors
Computes min/max for each dimension across all training vectors.
§Panics
Panics if training vectors have inconsistent dimensions.
Sourcepub fn with_bounds(dim: usize, min: f32, max: f32) -> Self
pub fn with_bounds(dim: usize, min: f32, max: f32) -> Self
Create quantizer with known min/max bounds
Use this when you know the expected value range (e.g., normalized embeddings).
Sourcepub fn for_normalized(dim: usize) -> Self
pub fn for_normalized(dim: usize) -> Self
Create quantizer for normalized vectors ([-1, 1] range)
Sourcepub fn params(&self) -> &[ScalarQuantizationParams]
pub fn params(&self) -> &[ScalarQuantizationParams]
Get quantization parameters for analysis
Trait Implementations§
Source§impl Clone for ScalarQuantizer
impl Clone for ScalarQuantizer
Source§fn clone(&self) -> ScalarQuantizer
fn clone(&self) -> ScalarQuantizer
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ScalarQuantizer
impl Debug for ScalarQuantizer
Source§impl<'de> Deserialize<'de> for ScalarQuantizer
impl<'de> Deserialize<'de> for ScalarQuantizer
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Quantizer for ScalarQuantizer
impl Quantizer for ScalarQuantizer
Source§type Quantized = ScalarQuantizedVector
type Quantized = ScalarQuantizedVector
Quantized representation type
Auto Trait Implementations§
impl Freeze for ScalarQuantizer
impl RefUnwindSafe for ScalarQuantizer
impl Send for ScalarQuantizer
impl Sync for ScalarQuantizer
impl Unpin for ScalarQuantizer
impl UnsafeUnpin for ScalarQuantizer
impl UnwindSafe for ScalarQuantizer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more