1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
use crate::math::{Matrix, Point, Real}; /// Computes the covariance matrix of a set of points. pub fn cov(pts: &[Point<Real>]) -> Matrix<Real> { let center = crate::utils::center(pts); let mut cov: Matrix<Real> = na::zero(); let normalizer: Real = 1.0 / (pts.len() as Real); for p in pts.iter() { let cp = *p - center; // NOTE: this is more numerically stable than using cov.syger. cov += cp * (cp * normalizer).transpose(); } cov }