# Procrustes: A python library to find transformations that maximize the similarity between matrices

## Description

We have developed Procrustes, a free, open-source, cross-platform, and user-friendly Python library implementing a wide-range of algorithmic solutions to Procrustes problems. The goal of Procrustes analysis is to find an optimal transformation that makes two matrices as close as possible to each other, where the matrices are often (but need not always be) a list of multidimensional points specifying the systems of interest. We demonstrate the functionality of the package through various examples, mostly from cheminformatics. However, Procrustes analysis has broad applicability including image recognition, signal processing, data science, machine learning, computational biology, chemistry, and physics. Our library includes methods for one-sided Procrustes problems using orthogonal, rotational, symmetric, and permutation transformation matrices, as well as two-sided Procrustes problems using orthogonal and permutation transformation matrices. For the two-sided permutation Procrustes problem, we include heuristic algorithms along with a rigorous (but slow) method based on softassign. In addition, we include a general formulation of the Procrustes problem. The Procrustes source code and documentation is hosted on GitHub (https://github.com/theochem/procrustes).