fn main() -> Result<(), Box> { let mut rdr = csv::ReaderBuilder::new() .has_headers(true) .from_path("data/data.csv")?; let mut x_train: Vec> = Vec::new(); let mut y_train: Vec = Vec::new(); for result in rdr.records() { let record = result?; let x1: f64 = record[0].parse()?; let x2: f64 = record[1].parse()?; let y: f64 = record[2].parse()?; x_train.push(vec![x1, x2]); y_train.push(y); } let gp_model = friedrich::gaussian_process::GaussianProcess::default(x_train, y_train); let mut x_test: Vec> = Vec::new(); let m = 1000; for i in -m..=m { for j in -m..=m { let x1 = i as f64 * 0.1; let x2 = j as f64 * 0.1; x_test.push(vec![x1, x2]); } } let y_mu = gp_model.predict(&x_test); let y_var = gp_model.predict_variance(&x_test); let mut n: usize = 0; for i in -m..=m { for j in -m..=m { println!( "{:.1}, {:.1}, {}, {}", i as f64 * 0.1, j as f64 * 0.1, y_mu[n], y_var[n].sqrt() ); n += 1; } } // println!("{:?}", gp_model.kernel); Ok(()) }