Source code for geomstats.geometry.euclidean

"""Euclidean space."""

import geomstats.backend as gs
from geomstats.geometry.manifold import Manifold
from geomstats.geometry.riemannian_metric import RiemannianMetric


[docs]class Euclidean(Manifold): """Class for Euclidean spaces. By definition, a Euclidean space is a vector space of a given dimension, equipped with a Euclidean metric. Parameters ---------- dim : int Dimension of the Euclidean space. """ def __init__(self, dim): super(Euclidean, self).__init__(dim=dim) self.metric = EuclideanMetric(dim)
[docs] def belongs(self, point): """Evaluate if a point belongs to the Euclidean space. Parameters ---------- point : array-like, shape=[..., dim] Point to evaluate. Returns ------- belongs : array-like, shape=[...,] Boolean evaluating if point belongs to the Euclidean space. """ point_dim = point.shape[-1] belongs = point_dim == self.dim if gs.ndim(point) == 2: belongs = gs.tile([belongs], (point.shape[0],)) return belongs
[docs] def random_uniform(self, n_samples=1, bound=1.): """Sample in the Euclidean space with the uniform distribution. Parameters ---------- n_samples : int Number of samples. Optional, default: 1. bound : float Side of hypercube support of the uniform distribution. Optional, default: 1.0 Returns ------- point : array-like, shape=[..., dim] Sample. """ size = (self.dim,) if n_samples != 1: size = (n_samples, self.dim) point = bound * (gs.random.rand(*size) - 0.5) * 2 return point
[docs]class EuclideanMetric(RiemannianMetric): """Class for Euclidean metrics. As a Riemannian metric, the Euclidean metric is: - flat: the inner-product is independent of the base point. - positive definite: it has signature (dimension, 0, 0), where dimension is the dimension of the Euclidean space. Parameters ---------- dim : int Dimension of the Euclidean space. """ def __init__(self, dim): super(EuclideanMetric, self).__init__( dim=dim, signature=(dim, 0, 0))
[docs] def inner_product_matrix(self, base_point=None): """Compute the inner-product matrix, independent of the base point. Parameters ---------- base_point : array-like, shape=[..., dim] Base point. Optional, default: None. Returns ------- inner_prod_mat : array-like, shape=[..., dim, dim] Inner-product matrix. """ mat = gs.eye(self.dim) return mat
[docs] def exp(self, tangent_vec, base_point): """Compute exp map of a base point in tangent vector direction. The Riemannian exponential is vector addition in the Euclidean space. Parameters ---------- tangent_vec : array-like, shape=[..., dim] Tangent vector at base point. base_point : array-like, shape=[..., dim] Base point. Returns ------- exp : array-like, shape=[..., dim] Riemannian exponential. """ exp = base_point + tangent_vec return exp
[docs] def log(self, point, base_point): """Compute log map using a base point and other point. The Riemannian logarithm is the subtraction in the Euclidean space. Parameters ---------- point: array-like, shape=[..., dim] Point. base_point: array-like, shape=[..., dim] Base point. Returns ------- log: array-like, shape=[..., dim] Riemannian logarithm. """ log = point - base_point return log