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
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
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
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