Source code for UQpy.utilities.kernels.baseclass.GrassmannianKernel

import itertools
from abc import ABC, abstractmethod
from typing import Union, Tuple

import numpy as np

from UQpy.utilities.GrassmannPoint import GrassmannPoint
from UQpy.utilities.kernels.baseclass.Kernel import Kernel


[docs]class GrassmannianKernel(Kernel, ABC): """The parent class for Grassmannian kernels implemented in the :py:mod:`kernels` module .""" def __init__(self, kernel_parameter: Union[int, float] = None): """ :param kernel_parameter: Number of independent p-planes of each Grassmann point. """ super().__init__(kernel_parameter)
[docs] def calculate_kernel_matrix(self, x: list[GrassmannPoint], s: list[GrassmannPoint]): p = self.kernel_parameter list1 = [point.data if not p else point.data[:, :p] for point in x] list2 = [point.data if not p else point.data[:, :p] for point in s] product = [self.element_wise_operation(point_pair) for point_pair in list(itertools.product(list1, list2))] self.kernel_matrix = np.array(product).reshape(len(list1), len(list2)) return self.kernel_matrix
@abstractmethod def element_wise_operation(self, xi_j: Tuple) -> float: pass