2015-10-03 7 views
7

मैं एक मनमाना 2x2 मैट्रिक्स बनाने के लिए:numpy.linalg.eig द्वारा बनाई eigenvectors नहीं है सही

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]]) 

मैं:

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

In [88]: mymat 
Out[88]: 
matrix([[2, 4], 
     [5, 3]]) 

मैं का उपयोग कर numpy.linalg.eig eigenvectors गणना करने के लिए प्रयास मेरे मैट्रिक्स के साथ मेरे ईजिनवेक्टरों में से एक को गुणा करने के परिणामस्वरूप एक वेक्टर होने की उम्मीद है जो मेरे ईजिनवेक्टर का स्केलर एकाधिक है।

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

हालांकि यह नहीं है। क्या कोई मुझे बता सकता है कि यहां क्या गलत हो रहा है?

उत्तर

11

प्रलेखन से 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]``. 

आप स्तंभ, नहीं पंक्तियों चाहते हैं।

>>> 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.]]) 
1

नहीं, यह सच है। numpy सही ढंग से काम नहीं करता है। उदाहरण:

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.  ]]) 
संबंधित मुद्दे