Exemple #1
0
    def _aux_log(self, point, sqrt_base_point, inv_sqrt_base_point):
        """Compute the log (auxiliary function).

        Parameters
        ----------
        point
        sqrt_base_point
        inv_sqrt_base_point

        Returns
        -------
        log
        """
        point_near_id = gs.matmul(inv_sqrt_base_point, point)
        point_near_id = gs.matmul(point_near_id, inv_sqrt_base_point)
        point_near_id = GeneralLinear.make_symmetric(point_near_id)
        log_at_id = gs.linalg.logm(point_near_id)

        log = gs.matmul(sqrt_base_point, log_at_id)
        log = gs.matmul(log, sqrt_base_point)
        return log
Exemple #2
0
    def _aux_exp(self, tangent_vec, sqrt_base_point, inv_sqrt_base_point):
        """Compute the exponential map (auxiliary function).

        Parameters
        ----------
        tangent_vec : array-like, shape=[n_samples, n, n]
        sqrt_base_point
        inv_sqrt_base_point

        Returns
        -------
        exp
        """
        tangent_vec_at_id = gs.matmul(inv_sqrt_base_point, tangent_vec)
        tangent_vec_at_id = gs.matmul(tangent_vec_at_id, inv_sqrt_base_point)
        tangent_vec_at_id = GeneralLinear.make_symmetric(tangent_vec_at_id)
        exp_from_id = gs.linalg.expm(tangent_vec_at_id)

        exp = gs.matmul(exp_from_id, sqrt_base_point)
        exp = gs.matmul(sqrt_base_point, exp)
        return exp
Exemple #3
0
    def _aux_log(point, sqrt_base_point, inv_sqrt_base_point):
        """Compute the log (auxiliary function).

        Parameters
        ----------
        point
        sqrt_base_point
        inv_sqrt_base_point

        Returns
        -------
        log
        """
        point_near_id = gs.einsum('...ij,...jk->...ik', inv_sqrt_base_point,
                                  point)
        point_near_id = gs.einsum('...ij,...jk->...ik', point_near_id,
                                  inv_sqrt_base_point)
        point_near_id = GeneralLinear.make_symmetric(point_near_id)
        log_at_id = SPDMatrices.logm(point_near_id)

        log = gs.einsum('...ij,...jk->...ik', sqrt_base_point, log_at_id)
        log = gs.einsum('...ij,...jk->...ik', log, sqrt_base_point)
        return log
Exemple #4
0
    def _aux_exp(tangent_vec, sqrt_base_point, inv_sqrt_base_point):
        """Compute the exponential map (auxiliary function).

        Parameters
        ----------
        tangent_vec : array-like, shape=[n_samples, n, n]
        sqrt_base_point
        inv_sqrt_base_point

        Returns
        -------
        exp
        """
        tangent_vec_at_id = gs.einsum('...ij,...jk->...ik',
                                      inv_sqrt_base_point, tangent_vec)
        tangent_vec_at_id = gs.einsum('...ij,...jk->...ik', tangent_vec_at_id,
                                      inv_sqrt_base_point)
        tangent_vec_at_id = GeneralLinear.make_symmetric(tangent_vec_at_id)
        exp_from_id = SymmetricMatrices.expm(tangent_vec_at_id)

        exp = gs.einsum('...ij,...jk->...ik', exp_from_id, sqrt_base_point)
        exp = gs.einsum('...ij,...jk->...ik', sqrt_base_point, exp)
        return exp