kmeans 2.0.2

Small and fast library for k-means clustering calculations.
Documentation
use crate::memory::SupportedSimdArray;
use crate::{DistanceFunction, Primitive};
use std::simd::num::SimdFloat;
use std::simd::Simd;

pub struct EuclideanDistance;

impl<T, const LANES: usize> DistanceFunction<T, LANES> for EuclideanDistance
where
    T: Primitive,
    Simd<T, LANES>: SupportedSimdArray<T, LANES>,
{
    #[inline(always)]
    fn distance(&self, a: &[T], b: &[T]) -> T {
        a.chunks_exact(LANES)
            .map(|i| Simd::from_slice(i))
            .zip(b.chunks_exact(LANES).map(|i| Simd::from_slice(i)))
            .map(|(sp, cp)| sp - cp)
            .map(|v| v * v)
            .sum::<Simd<T, LANES>>()
            .reduce_sum()
    }
}