def projection(self, point): """Make a square matrix lower triangular by zeroing out other elements. Parameters ---------- point : array-like, shape=[..., n, n] Matrix. Returns ------- sym : array-like, shape=[..., n, n] Symmetric matrix. """ return Matrices.to_lower_triangular(point)
def random_point(self, n_samples=1, bound=1.0): """Sample a lower triangular matrix with a uniform distribution in a box. 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=[..., n, n] Sample. """ sample = super(LowerTriangularMatrices, self).random_point(n_samples, bound) return Matrices.to_lower_triangular(sample)
def projection(self, point): """Project a matrix to the Cholesksy space. First it is projected to space lower triangular matrices and then diagonal elements are exponentiated to make it positive. Parameters ---------- point : array-like, shape=[..., n, n] Matrix to project. Returns ------- projected: array-like, shape=[..., n, n] SPD matrix. """ vec_diag = gs.abs(Matrices.diagonal(point) - 0.1) + 0.1 diag = gs.vec_to_diag(vec_diag) strictly_lower_triangular = Matrices.to_lower_triangular(point) projection = diag + strictly_lower_triangular return projection