use ndarray::ArrayView1;
use crate::GP;
pub struct GPRealization<'a> {
gp: &'a GP,
f_train: Vec<f64>,
beta: Vec<f64>,
#[allow(unused)]
z_train: Vec<f64>, }
impl<'a> GPRealization<'a> {
pub(crate) fn new(
gp: &'a GP,
f_train: Vec<f64>,
beta: Vec<f64>,
z_train: Vec<f64>,
) -> Self {
Self { gp, f_train, beta, z_train}
}
pub fn at_training_points(&self) -> &[f64] {
&self.f_train
}
pub fn value(&self, x: ArrayView1<f64>) -> f64 {
let mut val = 0.;
self.gp.for_each_kernel_entry(x, |i, kij| {
val += kij * self.beta[i];
});
val
}
}