Eigenvectors created by numpy.linalg.eig do not seem to be correct

I create an arbitrary 2x2 matrix:

In [87]: mymat = np.matrix([[2,4],[5,3]]) In [88]: mymat Out[88]: matrix([[2, 4], [5, 3]]) 

I am trying to compute eigenvectors using numpy.linalg.eig:

 In [91]: np.linalg.eig(mymat) Out[91]: (array([-2., 7.]), matrix([[-0.70710678, -0.62469505], [ 0.70710678, -0.78086881]])) In [92]: eigvec = np.linalg.eig(mymat)[1][0].T In [93]: eigvec Out[93]: matrix([[-0.70710678], [-0.62469505]]) 

I multiply one of my own vectors with my matrix, expecting the result to be a vector that is a scalar multiple of my own vector.

 In [94]: mymat * eigvec Out[94]: matrix([[-3.91299375], [-5.40961905]]) 

However, it is not. Can someone explain to me what is going wrong here?

+7
python numpy matrix eigenvector
source share
2 answers

From the documentation for linalg.eig :

 v : (..., M, M) array The normalized (unit "length") eigenvectors, such that the column ``v[:,i]`` is the eigenvector corresponding to the eigenvalue ``w[i]``. 

You need columns, not rows.

 >>> mymat = np.matrix([[2,4],[5,3]]) >>> vals, vecs = np.linalg.eig(mymat) >>> vecs[:,0] matrix([[-0.70710678], [ 0.70710678]]) >>> (mymat * vecs[:,0])/vecs[:,0] matrix([[-2.], [-2.]]) >>> vecs[:,1] matrix([[-0.62469505], [-0.78086881]]) >>> (mymat * vecs[:,1])/vecs[:,1] matrix([[ 7.], [ 7.]]) 
+11
source share

No, its true. numpy is not working properly. Example:

 A Out[194]: matrix([[-3, 3, 2], [ 1, -1, -2], [-1, -3, 0]]) E = np.linalg.eig(A) E Out[196]: (array([ 2., -4., -2.]), matrix([[ -2.01889132e-16, 9.48683298e-01, 8.94427191e-01], [ 5.54700196e-01, -3.16227766e-01, -3.71551690e-16], [ -8.32050294e-01, 2.73252305e-17, 4.47213595e-01]])) A*E[1] / E[1] Out[205]: matrix([[ 6.59900617, -4. , -2. ], [ 2. , -4. , -3.88449298], [ 2. , 8.125992 , -2. ]]) 
+1
source share

All Articles