left hand side eigenvector in python? left hand side eigenvector in python? numpy numpy

left hand side eigenvector in python?


Your result is correct to my understanding.

However, you might be misinterpreting it. The numpy docs are a bit clearer on what the left eigenvectors should be.

Finally, it is emphasized that v consists of the right (as in right-hand side) eigenvectors of a. A vector y satisfying dot(y.T, a) = z * y.T for some number z is called a left eigenvector of a, and, in general, the left and right eigenvectors of a matrix are not necessarily the (perhaps conjugate) transposes of each other.

I.e. you need to transpose the vectors in vl. vl[:,i].T is the i-th left eigenvector.If I test this, I get, that the results are correct.

>>> import numpy as np>>> from scipy.linalg import eig>>> np.set_printoptions(precision=4)>>> T = np.mat("0.2 0.4 0.4;0.8 0.2 0.0;0.8 0.0 0.2")>>> print "T\n", TT[[ 0.2  0.4  0.4] [ 0.8  0.2  0. ] [ 0.8  0.   0.2]]>>> w, vl, vr = eig(T, left=True)>>> vlarray([[ 0.8165,  0.8165,  0.    ],       [ 0.4082, -0.4082, -0.7071],       [ 0.4082, -0.4082,  0.7071]])>>> [ np.allclose(np.dot(vl[:,i].T, T), w[i]*vl[:,i].T) for i in range(3) ][True, True, True]