gftool.matrix.decompose_mat

gftool.matrix.decompose_mat(mat) Decomposition[source]

Decompose matrix mat into eigenvalues and (right) eigenvectors.

Decompose the mat into rv, eig, rv_inv, with mat = (rv * eig) @ rv_inv. This is the similarity transformation:

\[M = P Λ P^{-1}, Λ = diag(λ₀, λ₁, …)\]

where \(λₗ\) are the eigenvalues and \(P\) the matrix of right eigenvectors returned as rv. Internally, this is just a wrapper for numpy.linalg.eig.

Parameters:
mat(…, N, N) complex np.ndarray

Matrix to be decomposed.

Returns:
Decomposition.rv(…, N, N) complex np.ndarray

The right eigenvectors \(P\).

Decomposition.eig(…, N) complex np.ndarray

The complex eigenvalues of mat.

Decomposition.rv_inv(…, N, N) complex np.ndarray

The inverse of the right eigenvectors \(P\).

Examples

Perform the eigendecomposition:

>>> matrix = np.random.random((10, 10))
>>> rv, eig, rv_inv = gt.matrix.decompose_mat(matrix)
>>> np.allclose(matrix, (rv * eig) @ rv_inv)
True
>>> np.allclose(rv @ rv_inv, np.eye(*matrix.shape))
True

This can also be simplified using the Decomposition class

>>> dec = gt.matrix.decompose_mat(matrix)
>>> np.allclose(matrix, dec.reconstruct())
True