terrustrial 0.1.0

A Rust library for geospatial statistics, variograms, and kriging.
Documentation
use std::iter;

use num_traits::Float;

pub struct ZeroMeanTransform<T>
where
    T: Float,
{
    mean: T,
}

impl<T> ZeroMeanTransform<T>
where
    T: Float,
{
    pub fn new(mean: T) -> Self {
        Self { mean }
    }

    pub fn mean(&self) -> T {
        self.mean
    }
    pub fn transform(&self, data: T) -> T {
        data - self.mean
    }

    pub fn back_transform(&self, data: T) -> T {
        data + self.mean
    }
}

impl<T> From<&[T]> for ZeroMeanTransform<T>
where
    T: Float + iter::Sum + Copy,
{
    fn from(data: &[T]) -> Self {
        let mean = data.iter().copied().sum::<T>() / T::from(data.len()).unwrap();
        Self::new(mean)
    }
}