use ndarray::{Array1, Array2};
use crate::{Error, Result};
#[derive(Clone, Debug, PartialEq)]
pub struct AffineModel {
pub matrix: Array2<f64>,
pub bias: Array1<f64>,
}
impl AffineModel {
pub fn new(matrix: Array2<f64>, bias: Array1<f64>) -> Result<Self> {
if matrix.nrows() == 0
|| matrix.ncols() == 0
|| bias.len() != matrix.ncols()
|| matrix
.iter()
.chain(bias.iter())
.any(|value| !value.is_finite())
{
return Err(Error::InvalidModel(
"invalid affine transform shape or value".into(),
));
}
Ok(Self { matrix, bias })
}
#[must_use]
pub fn n_features(&self) -> usize {
self.matrix.nrows()
}
#[must_use]
pub fn n_outputs(&self) -> usize {
self.matrix.ncols()
}
}