use matten::Tensor;
fn main() {
let data = Tensor::new(
vec![2.0, 4.0, 1.0, 4.0, 6.0, 3.0, 6.0, 8.0, 5.0, 8.0, 10.0, 7.0],
&[4, 3],
);
let means = data.mean_axis(0);
let centred = &data - &means;
let sq = ¢red * ¢red;
let variance = sq.mean_axis(0);
let std_dev_vals: Vec<f64> = variance.as_slice().iter().map(|v| v.sqrt()).collect();
let std_dev = Tensor::new(std_dev_vals, &[3]);
let standardised = ¢red / &std_dev;
println!("means = {:?}", means.as_slice());
println!("std devs = {:?}", std_dev.as_slice());
println!("result shape = {:?}", standardised.shape());
let col_means = standardised.mean_axis(0);
for &m in col_means.as_slice() {
assert!(m.abs() < 1e-10, "column mean not zero: {m}");
}
println!("Column means ≈ 0: OK");
}