1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use crate::opensrdk_linear_algebra::*;
use opensrdk_kernel_method::*;
use rayon::prelude::*;
pub fn kernel_matrix<T>(
kernel: &impl PositiveDefiniteKernel<T>,
params: &[f64],
x: &[T],
x_prime: &[T],
) -> Result<Matrix, KernelError>
where
T: Value,
{
let m = x.len();
let n = x_prime.len();
let elems = (0..n)
.into_par_iter()
.flat_map(|j| {
(0..m)
.into_par_iter()
.map(move |i| Ok(kernel.value(params, &x[i], &x_prime[j])?))
})
.collect::<Result<Vec<_>, KernelError>>()?;
let k = Matrix::from(m, elems);
Ok(k.unwrap())
}