use na::DefaultAllocator; use aliases::{Vec, Mat}; use traits::{Alloc, Number, Dimension}; /// Perform a component-wise equal-to comparison of two matrices. /// /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. pub fn equal_columns(x: &Mat, y: &Mat) -> Vec where DefaultAllocator: Alloc { let mut res = Vec::<_, C>::repeat(false); for i in 0..C::dim() { res[i] = x.column(i) == y.column(i) } res } /// Returns the component-wise comparison of `|x - y| < epsilon`. /// /// True if this expression is satisfied. pub fn equal_columns_eps(x: &Mat, y: &Mat, epsilon: N) -> Vec where DefaultAllocator: Alloc { equal_columns_eps_vec(x, y, &Vec::<_, C>::repeat(epsilon)) } /// Returns the component-wise comparison of `|x - y| < epsilon`. /// /// True if this expression is satisfied. pub fn equal_columns_eps_vec(x: &Mat, y: &Mat, epsilon: &Vec) -> Vec where DefaultAllocator: Alloc { let mut res = Vec::<_, C>::repeat(false); for i in 0..C::dim() { res[i] = (x.column(i) - y.column(i)).abs() < Vec::<_, R>::repeat(epsilon[i]) } res } /// Perform a component-wise not-equal-to comparison of two matrices. /// /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. pub fn not_equal_columns(x: &Mat, y: &Mat) -> Vec where DefaultAllocator: Alloc { let mut res = Vec::<_, C>::repeat(false); for i in 0..C::dim() { res[i] = x.column(i) != y.column(i) } res } /// Returns the component-wise comparison of `|x - y| < epsilon`. /// /// True if this expression is not satisfied. pub fn not_equal_columns_eps(x: &Mat, y: &Mat, epsilon: N) -> Vec where DefaultAllocator: Alloc { not_equal_columns_eps_vec(x, y, &Vec::<_, C>::repeat(epsilon)) } /// Returns the component-wise comparison of `|x - y| >= epsilon`. /// /// True if this expression is not satisfied. pub fn not_equal_columns_eps_vec(x: &Mat, y: &Mat, epsilon: &Vec) -> Vec where DefaultAllocator: Alloc { let mut res = Vec::<_, C>::repeat(false); for i in 0..C::dim() { res[i] = (x.column(i) - y.column(i)).abs() >= Vec::<_, R>::repeat(epsilon[i]) } res }