numpy.linalg.eig
-
numpy.linalg.eig(a)[source] -
Вычисление собственных значений и правых собственных векторов квадратной матрицы.
Параметры: a : (..., M, M) массив
Матрицы, для которых будут вычислены собственные значения и правые собственные векторы
Возвращает: w : (..., M) массив
Собственные значения, каждое повторяется в соответствии с его кратностью. Собственные значения не обязательно упорядочены. Результирующий массив будет комплексного типа, если мнимая часть равна нулю, в этом случае он будет преобразован к вещественному типу. Когда
aвещественный, полученные собственные значения будут вещественными (0 мнимая часть) или появятся в сопряжённых парахv : (..., M, M) массив
Нормализованные (единичной «длины») собственные векторы, такие что столбец
v[:,i]является собственным вектором, соответствующим собственному значениюw[i].Возбуждает: LinAlgError
Если вычисление собственных значений не сходится.
См. также
Примечания
Введено в версии 1.8.0.
Применяются правила векторизации, см. документацию по
numpy.linalgдля подробностей.Это реализовано с использованием функций _geev LAPACK, которые вычисляют собственные значения и собственные векторы произвольных квадратных матриц.
Число
wявляется собственным значением матрицыa, если существует векторv, такой чтоdot(a,v) = w * v. Таким образом, матрицыa,w, иvудовлетворяют уравнениямdot(a[:,:], v[:,i]) = w[i] * v[:,i]для
. Матрица
vсобственных векторов может не иметь максимального ранга, то есть некоторые столбцы могут быть линейно зависимыми, хотя погрешность округления может это скрыть. Если собственные значения все различны, то теоретически собственные векторы линейно независимы. Аналогично, (комплекснозначная) матрица собственных векторовvявляется унитарной, если матрицаaявляется нормальной, т.е. еслиdot(a, a.H) = dot(a.H, a), гдеa.Hобозначает сопряжённо-транспонированную матрицуa.Наконец, следует подчеркнуть, что
vсостоит из правых (как на правой стороне) собственных векторов матрицыa. Векторyудовлетворяющийdot(y.T, a) = z * y.Tдля некоторого числаzназывается левым собственным вектором матрицыa, и, вообще говоря, левые и правые собственные векторы матрицы не обязательно являются (возможно сопряжёнными) транспонированными друг к другу.Ссылки
Г. Странг, Линейная алгебра и ее приложения, 2-е изд., Орландо, Флорида, Academic Press, Inc., 1980, Различные страницы.
Примеры
>>> from numpy import linalg as LA
(Почти) тривиальный пример с вещественными собственными значениями и собственными векторами.
>>> 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.]])Вещественная матрица, обладающая комплексными собственными значениями и собственными векторами; обратите внимание, что собственные значения являются комплексно сопряжёнными друг к другу.
>>> 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.70710678+0.j ], [ 0.00000000-0.70710678j, 0.00000000+0.70710678j]])Комплекснозначная матрица с вещественными собственными значениями (но комплексными собственными векторами); обратите внимание, что a.conj().T = a, т.е. a является эрмитовой матрицей.
>>> a = np.array([[1, 1j], [-1j, 1]]) >>> w, v = LA.eig(a) >>> w; v array([ 2.00000000e+00+0.j, 5.98651912e-36+0.j]) # i.e., {2, 0} array([[ 0.00000000+0.70710678j, 0.70710678+0.j ], [ 0.70710678+0.j , 0.00000000+0.70710678j]])Будьте осторожны с погрешностью округления!
>>> a = np.array([[1 + 1e-9, 0], [0, 1 - 1e-9]]) >>> # Theor. e-values are 1 +/- 1e-9 >>> w, v = LA.eig(a) >>> w; v array([ 1., 1.]) array([[ 1., 0.], [ 0., 1.]])
© 2008–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.eig.html