onnx-export-rs 0.1.0

Export canonical Rust machine-learning models to ONNX
Documentation
use ndarray::{Array1, Array2, Array3};

use crate::{Error, Result};

/// Full-covariance Gaussian mixture inference parameters.
#[derive(Clone, Debug, PartialEq)]
pub struct GaussianMixture {
    /// Component means shaped `[components, features]`.
    pub means: Array2<f64>,
    /// Component precision matrices shaped `[components, features, features]`.
    pub precisions: Array3<f64>,
    /// Constant log-score offset for every component.
    pub offsets: Array1<f64>,
}

impl GaussianMixture {
    /// Creates validated Gaussian-mixture inference state.
    pub fn new(means: Array2<f64>, precisions: Array3<f64>, offsets: Array1<f64>) -> Result<Self> {
        let components = means.nrows();
        let features = means.ncols();
        if components == 0
            || features == 0
            || precisions.dim() != (components, features, features)
            || offsets.len() != components
            || means
                .iter()
                .chain(precisions.iter())
                .chain(offsets.iter())
                .any(|value| !value.is_finite())
        {
            return Err(Error::InvalidModel("invalid Gaussian mixture state".into()));
        }
        Ok(Self {
            means,
            precisions,
            offsets,
        })
    }
}