How do I find out eigenvectors corresponding to a particular eigenvalue of a matrix?

后端 未结 2 1076

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

相关标签:
2条回答
  • 2021-02-10 01:57

    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)
    
    0 讨论(0)
  • 2021-02-10 02:01
    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.

    0 讨论(0)
提交回复
热议问题