コード例 #1
0
    def tangent_pca(self, points, base_point=None, point_type='vector'):
        """Perform tPCA of points on the tangent space at a base point.

        Tangent Principal Component Analysis (tPCA) of points
        on the tangent space at a base point.

        Parameters
        ----------
        points
        base_point
        point_type

        Returns
        -------
        eigenvalues
        tangent_eigenvecs
        """
        if point_type == 'matrix':
            raise NotImplementedError(
                'This is currently only implemented for vectors.')
        if base_point is None:
            base_point = self.mean(points)

        tangent_vecs = self.log(points, base_point=base_point)

        covariance_mat = gs.cov(tangent_vecs.transpose())
        eigenvalues, tangent_eigenvecs = gs.linalg.eig(covariance_mat)

        idx = eigenvalues.argsort()[::-1]
        eigenvalues = eigenvalues[idx]
        tangent_eigenvecs = tangent_eigenvecs[idx]

        return eigenvalues, tangent_eigenvecs
コード例 #2
0
    def tangent_pca(self, points, base_point=None):
        """
        Tangent Principal Component Analysis (tPCA) of points
        on the tangent space at a base point.
        """
        # TODO(nina): It only works for points of ndim=2, adapt to other ndims.
        if base_point is None:
            base_point = self.mean(points)

        tangent_vecs = self.log(points, base_point=base_point)

        covariance_mat = gs.cov(tangent_vecs.transpose())
        eigenvalues, tangent_eigenvecs = gs.linalg.eig(covariance_mat)

        idx = eigenvalues.argsort()[::-1]
        eigenvalues = eigenvalues[idx]
        tangent_eigenvecs = tangent_eigenvecs[idx]

        return eigenvalues, tangent_eigenvecs
コード例 #3
0
    def tangent_pca(self, points, base_point=None):
        """
        Tangent Principal Component Analysis (tPCA) at base_point.
        This is standard PCA on the Riemannian Logarithms of the points
        at the base point.
        """
        # TODO(xxx): It only works for points of ndim=2, adapt to other ndims.
        if base_point is None:
            base_point = self.mean(points)

        tangent_vecs = self.log(points, base_point=base_point)

        covariance_mat = gs.cov(tangent_vecs.transpose())
        eigenvalues, tangent_eigenvecs = gs.linalg.eig(covariance_mat)

        idx = eigenvalues.argsort()[::-1]
        eigenvalues = eigenvalues[idx]
        tangent_eigenvecs = tangent_eigenvecs[idx]

        return eigenvalues, tangent_eigenvecs