use matrix_kit::dynamic::matrix::Matrix;
use super::svd::compressed_svd;
pub fn mean(data: Matrix<f64>) -> Matrix<f64> {
let ones = Matrix::ones(data.col_count(), 1);
let mut mean = data.clone() * ones;
mean /= data.col_count() as f64;
mean
}
pub fn centered(data: Matrix<f64>) -> (Matrix<f64>, Matrix<f64>) {
let mean = mean(data.clone());
let subtraction_matrix = Matrix::from_cols(vec![mean.clone() ; data.col_count()]);
(data - subtraction_matrix, mean)
}
pub fn plane_of_best_fit(
data: Matrix<f64>, k: usize
) -> (Matrix<f64>, Matrix<f64>) {
let (centered, mean) = centered(data);
let (_, v, _) = compressed_svd(¢ered.transpose(), k);
let basis = v;
(basis, mean)
}
pub fn predict(plane: (Matrix<f64>, Matrix<f64>), witness: Matrix<f64>) {
}