Hi,
Let us assume that
r = rank(C) < N (1)
where C is a symmetric NxN matrix. This implies that the number
of non-zero eigenvalues of C is r. Because C is a symmetric
matrix there exists an orthogonal matrix U whose columns are
the eigenvectors of C such that
U^\top C U = [ d , O
O , O]. (2)
In the above equation d \in rxr is a diagonal matrix consisting
of only the non-zero eigenvalues of C.
For convenience, partition U as
U = [U_1 | U_2] (3)
where the columns of U_1 (Nxr) are the eigenvectors corresponding to the
non-zero block
d and the columns of U_2 are the eigenvectors corresponding to the rest
(N-r) number
of zero eigenvalues.
Defining a rectangular transformation matrix
R = U_1 (4)
it is easy to show that
R^\top C R = d. (5)
Therefore, the matrix R in equation (4) transforms the originally rank
deficient
matrix C to a full-rank (diagonal) matrix of rank r.
I am looking for an efficient Numpy implementation of this
transformation.
Thanks in advance
Nils Wagner