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 eigenv
If you are looking for one eigenvector corresponding to one eigenvalue, it could be much more efficient to use the scipy.sparse.linalg implementation of the eig function. It allows to look for a fixed number of eigenvectors and to shift the search around a specific value. You could do for instance :
values, vectors = scipy.sparse.linalg.eigs(P, k=1, sigma=1)
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.