I want to find an eigenvector decomposition of a dense complex matrix A
A = V.diag(lambda).V^-1
I only need a small number of the eigenvectors to reproduce the matrix accurately for my needs, however I need to perform some non-trivial filtering on the eigenvalues to determine which eigenvectors to include. For my problem it is not appropriate to use a singular value decomposition, as the eigenvalues/eigenvectors are the physically meaningful results I want to work with.
I am using scipy.linalg.eig, which is just a convenient wrapper around lapack's ZGEEV routine. Mathematically, V^-1 should be obtainable from an appropriately scaled version of the left eigenvectors. I would have expected this to be more efficient and more stable than inverting V, the matrix of right eigenvectors
However, when I compare the two approaches, it seems that using both the left eigenvectors in the decomposed matrix is much less accurate than using the inverted right eigenvectors. Presumably this is some kind of round-off or truncation error. I would prefer not to invert the matrix of right eigenvectors, as it is potentially quite large (of the order of 1000s) and I would need to repeat this operation many times.
Is there some routine available in scipy (or lapack or some other routine which I might be able to wrap myself) which efficiently and accurately gives the decomposition?