PosDefManifold is a Julia package for manipulating data in the manifold P of real or complex positive definite matrices. The package supports 10 metrics acting on P, two of which define Riemannian manifolds.
This package computes distances, geodesics, weighted Fréchet means and inductive Fréchet means for the supported metrics, graph Laplacians, Lapacian eigen maps, tangent space projections, parallel transport, the geometric midrange, matrix approximations and a special solution of the Procrustes problem in P. Key functions are multi-threaded.
The documentation is rich and gives all mathematical details pertaining to the implemented functions.
For machine learning in P see PosDefManifoldML.jl.
For optimization in P see Manopt.jl.
See also Manifolds.jl.
For similar code resources in other programming languages see here.
About the author
Marco Congedo is a Research Director of CNRS (Centre National de la Recherche Scientifique), working at UGA (University of Grenoble Alpes), in Grenoble (France).
marco dot congedo at gmail dot com
using PosDefManifold P, Q = randP(20), randP(20) # random Positive Definite Matrices (PDMs) of size 20x20 d = distance(Fisher, P, Q) # distance between P and Q R = geodesic(Fisher, P, Q, 0.1) # move on the geodesic relying P and Q G = mean(Fisher, P, Q) # mean of P and Q (geodesic mid-point) U = procrustes(P, Q) # solution to a special Procrustes problem S = logMap(Fisher, P, G) # tangent space mapping 𝐏 = randP(20, 100) # random set 𝐏 of 100 PDMs of size 20x20 G = mean(Fisher, 𝐏) # mean of all matrices in set 𝐏 λ, U, i, c = spEmb(Fisher, 𝐏, 3) # spectral embedding in 3D