numpy.linalg.eig(a)
[source]
Compute the eigenvalues and right eigenvectors of a square array.
Parameters: 


Returns: 

Raises: 

See also
New in version 1.8.0.
Broadcasting rules apply, see the numpy.linalg
documentation for details.
This is implemented using the _geev
LAPACK routines which compute the eigenvalues and eigenvectors of general square arrays.
The number w
is an eigenvalue of a
if there exists a vector v
such that dot(a,v) = w * v
. Thus, the arrays a
, w
, and v
satisfy the equations dot(a[:,:], v[:,i]) = w[i] * v[:,i]
for .
The array v
of eigenvectors may not be of maximum rank, that is, some of the columns may be linearly dependent, although roundoff error may obscure that fact. If the eigenvalues are all different, then theoretically the eigenvectors are linearly independent. Likewise, the (complexvalued) matrix of eigenvectors v
is unitary if the matrix a
is normal, i.e., if dot(a, a.H) = dot(a.H, a)
, where a.H
denotes the conjugate transpose of a
.
Finally, it is emphasized that v
consists of the right (as in righthand side) eigenvectors of a
. A vector y
satisfying dot(y.T, a) = z * y.T
for some number z
is called a left eigenvector of a
, and, in general, the left and right eigenvectors of a matrix are not necessarily the (perhaps conjugate) transposes of each other.
G. Strang, Linear Algebra and Its Applications, 2nd Ed., Orlando, FL, Academic Press, Inc., 1980, Various pp.
>>> from numpy import linalg as LA
(Almost) trivial example with real evalues and evectors.
>>> w, v = LA.eig(np.diag((1, 2, 3))) >>> w; v array([1., 2., 3.]) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
Real matrix possessing complex evalues and evectors; note that the evalues are complex conjugates of each other.
>>> w, v = LA.eig(np.array([[1, 1], [1, 1]])) >>> w; v array([1.+1.j, 1.1.j]) array([[0.70710678+0.j , 0.707106780.j ], [0. 0.70710678j, 0. +0.70710678j]])
Complexvalued matrix with real evalues (but complexvalued evectors); note that a.conj().T == a
, i.e., a
is Hermitian.
>>> a = np.array([[1, 1j], [1j, 1]]) >>> w, v = LA.eig(a) >>> w; v array([2.+0.j, 0.+0.j]) array([[ 0. +0.70710678j, 0.70710678+0.j ], # may vary [ 0.70710678+0.j , 0. +0.70710678j]])
Be careful about roundoff error!
>>> a = np.array([[1 + 1e9, 0], [0, 1  1e9]]) >>> # Theor. evalues are 1 +/ 1e9 >>> w, v = LA.eig(a) >>> w; v array([1., 1.]) array([[1., 0.], [0., 1.]])
© 2005–2019 NumPy Developers
Licensed under the 3clause BSD License.
https://docs.scipy.org/doc/numpy1.17.0/reference/generated/numpy.linalg.eig.html