How do I find out eigenvectors corresponding to a particular eigenvalue?
I have a stochastic matrix(P), one of the eigenvalues of which is 1. I need to find the eigenvector corresponding to the eigenvalue 1.
The scipy function scipy.linalg.eig returns the array of eigenvalues and eigenvectors.
D, V = scipy.linalg.eig(P)
Here D(array of values) and V(array of vectors) are both vectors.
One way is to do a search in D and extract the corresponding eigenvector in V. Is there an easier way?
import numpy as np
import numpy.linalg as linalg
P = np.array([[2, 0, 0], [0, 1, 0], [0, 0, 3]])
D, V = linalg.eig(P)
print(D)
# [ 2. 1. 3.]
The eigenvectors are columns of V:
V = V.T
for val, vec in zip(D, V):
assert np.allclose(np.dot(P, vec), val*vec)
So the eigenvector corresponding to eigenvalue 1.0 is
def near(a, b, rtol = 1e-5, atol = 1e-8):
return np.abs(a-b)<(atol+rtol*np.abs(b))
print(V[near(D, 1.0)])
# [[ 0. 1. 0.]]
Since there can be more than one eigenvector with the same eigenvalue, V[near(D, 1.0)]
returns a 2-dimensional array -- each row of the array is an eigenvector with an eigenvalue of 1.0.