pub struct ScalarQuantizer<D: DistanceMetric> {
metric: D,
min_val: f32,
scale: f32,
}Expand description
Scalar Quantization: compress each float32 dimension to uint8.
For each dimension, maps the value range [min, max] → [0, 255]. Distances are computed on uint8 values using integer arithmetic.
Pros: Simple, no training needed, ~4× distance speedup, <1% recall loss. Cons: Requires knowing the value range (uses [-1, 1] for normalized vectors).
This is what Qdrant uses by default for HNSW construction.
Fields§
§metric: D§min_val: f32Min value per dimension (for denormalization). Default: -1.0
scale: f32Scale factor: 255.0 / (max_val - min_val)
Implementations§
Source§impl<D: DistanceMetric> ScalarQuantizer<D>
impl<D: DistanceMetric> ScalarQuantizer<D>
Trait Implementations§
Source§impl<D: Clone + DistanceMetric> Clone for ScalarQuantizer<D>
impl<D: Clone + DistanceMetric> Clone for ScalarQuantizer<D>
Source§fn clone(&self) -> ScalarQuantizer<D>
fn clone(&self) -> ScalarQuantizer<D>
Returns a copy 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<D: DistanceMetric> Quantizer for ScalarQuantizer<D>
impl<D: DistanceMetric> Quantizer for ScalarQuantizer<D>
Source§fn encode(&self, vector: &[f32]) -> Self::Code
fn encode(&self, vector: &[f32]) -> Self::Code
Encode a full-precision vector into a compact code. Read more
Source§fn distance_approx(&self, a: &Self::Code, b: &Self::Code) -> f32
fn distance_approx(&self, a: &Self::Code, b: &Self::Code) -> f32
Fast approximate distance between two codes. Read more
Source§fn distance_exact(&self, a: &[f32], b: &[f32]) -> f32
fn distance_exact(&self, a: &[f32], b: &[f32]) -> f32
Exact distance between full-precision vectors. Read more
Source§fn is_accelerated(&self) -> bool
fn is_accelerated(&self) -> bool
Whether this quantizer provides actual acceleration. Read more
Source§fn needs_training(&self) -> bool
fn needs_training(&self) -> bool
Whether this quantizer needs training on a data sample before use. Read more
Auto Trait Implementations§
impl<D> Freeze for ScalarQuantizer<D>where
D: Freeze,
impl<D> RefUnwindSafe for ScalarQuantizer<D>where
D: RefUnwindSafe,
impl<D> Send for ScalarQuantizer<D>
impl<D> Sync for ScalarQuantizer<D>
impl<D> Unpin for ScalarQuantizer<D>where
D: Unpin,
impl<D> UnwindSafe for ScalarQuantizer<D>where
D: UnwindSafe,
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