pub struct L2Norm<Acc>(/* private fields */);Expand description
Identifies the Euclidean (L2) norm, ‖v‖₂ = √(Σᵢ |vᵢ|²).
The type parameter Acc selects the summation strategy for the scaled
sum-of-squares loop. Typical choices:
NaiveSum<R>— plain+=, fastest option.NeumaierSum<R>— compensated summation for higher accuracy when components span many orders of magnitude.
L2Norm<Acc> implements VectorNorm and ParallelVectorNorm for any
FpScalar whose RealType matches Acc::Input.
In addition to the standard norm, L2Norm exposes the squared Euclidean
norm ‖v‖₂² = Σᵢ |vᵢ|² as a separate operation (avoiding the square root)
via L2Norm::compute_vector_norm_sq and its iterator/parallel variants.
Note that ‖v‖₂² is not a norm — it violates the triangle inequality — and
is therefore not part of the VectorNorm trait.
Implementations§
Source§impl<Acc: SumAccumulator<Input: RealScalar>> L2Norm<Acc>
impl<Acc: SumAccumulator<Input: RealScalar>> L2Norm<Acc>
Sourcepub fn compute_vector_norm_sq<T>(v: &[T]) -> NonNegativeRealScalar<Acc::Output>
pub fn compute_vector_norm_sq<T>(v: &[T]) -> NonNegativeRealScalar<Acc::Output>
Computes the squared Euclidean (L2) norm ‖v‖₂² of a slice.
Equivalent to compute_vector_norm_sq_iter
called with v.iter().cloned().
This avoids the square root present in VectorNorm::compute_vector_norm
and is useful when only relative comparisons of norms are needed.
Sourcepub fn compute_vector_norm_sq_iter<I>(
v: I,
) -> NonNegativeRealScalar<Acc::Output>
pub fn compute_vector_norm_sq_iter<I>( v: I, ) -> NonNegativeRealScalar<Acc::Output>
Computes the squared Euclidean (L2) norm ‖v‖₂² from an owned iterator.
Uses the same scaled sum-of-squares algorithm as VectorNorm but
returns scale² × sumsq directly without taking the square root.
Source§impl<Acc> L2Norm<Acc>
impl<Acc> L2Norm<Acc>
Sourcepub fn compute_vector_norm_sq_par<T>(
v: &[T],
) -> NonNegativeRealScalar<Acc::Output>
pub fn compute_vector_norm_sq_par<T>( v: &[T], ) -> NonNegativeRealScalar<Acc::Output>
Computes the squared Euclidean (L2) norm ‖v‖₂² of a slice in parallel.
Equivalent to compute_vector_norm_sq_par_iter
called with v.par_iter().cloned().
Sourcepub fn compute_vector_norm_sq_par_iter<I>(
v: I,
) -> NonNegativeRealScalar<Acc::Output>
pub fn compute_vector_norm_sq_par_iter<I>( v: I, ) -> NonNegativeRealScalar<Acc::Output>
Computes the squared Euclidean (L2) norm ‖v‖₂² from a parallel iterator.
Chunks are processed in parallel and merged via
Accumulator::combine,
preserving the numerical properties of the chosen Acc strategy across chunks.
Trait Implementations§
Source§impl<T, SumAcc> ParallelVectorNorm<T> for L2Norm<SumAcc>
impl<T, SumAcc> ParallelVectorNorm<T> for L2Norm<SumAcc>
Source§fn compute_vector_norm_par_iter<I: IntoParallelIterator<Item = T>>(
iter: I,
) -> NonNegativeRealScalar<T::RealType>
fn compute_vector_norm_par_iter<I: IntoParallelIterator<Item = T>>( iter: I, ) -> NonNegativeRealScalar<T::RealType>
Source§fn compute_vector_norm_par(v: &[T]) -> NonNegativeRealScalar<T::RealType>
fn compute_vector_norm_par(v: &[T]) -> NonNegativeRealScalar<T::RealType>
Source§impl<ScalarType, SumAcc> VectorNorm<ScalarType> for L2Norm<SumAcc>
impl<ScalarType, SumAcc> VectorNorm<ScalarType> for L2Norm<SumAcc>
Source§fn compute_vector_norm_iter<I>(
v: I,
) -> NonNegativeRealScalar<ScalarType::RealType>where
I: IntoIterator<Item = ScalarType>,
fn compute_vector_norm_iter<I>(
v: I,
) -> NonNegativeRealScalar<ScalarType::RealType>where
I: IntoIterator<Item = ScalarType>,
Source§fn compute_vector_norm(
v: &[ScalarType],
) -> NonNegativeRealScalar<ScalarType::RealType>
fn compute_vector_norm( v: &[ScalarType], ) -> NonNegativeRealScalar<ScalarType::RealType>
Auto Trait Implementations§
impl<Acc> Freeze for L2Norm<Acc>
impl<Acc> RefUnwindSafe for L2Norm<Acc>where
Acc: RefUnwindSafe,
impl<Acc> Send for L2Norm<Acc>where
Acc: Send,
impl<Acc> Sync for L2Norm<Acc>where
Acc: Sync,
impl<Acc> Unpin for L2Norm<Acc>where
Acc: Unpin,
impl<Acc> UnsafeUnpin for L2Norm<Acc>
impl<Acc> UnwindSafe for L2Norm<Acc>where
Acc: 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
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
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>
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>
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