numpy.linalg.eig
-
numpy.linalg.eig(a)[source] -
Вычисление собственных значений и собственных векторов квадратной матрицы.
Параметры: -
a : (…, M, M) array -
Матрицы, для которых будут вычислены собственные значения и собственные векторы
Возвращает: -
w : (…, M) array -
Собственные значения, каждое повторяется в соответствии с его кратностью. Собственные значения не обязательно упорядочены. Результирующий массив будет комплексного типа, если мнимая часть не равна нулю, в противном случае он будет приведён к вещественному типу. Когда
aвещественная, полученные собственные значения будут вещественными (с мнимой частью 0) или встречаться в сопряжённых парах -
v : (…, M, M) array -
Нормализованные (единичной «длины») собственные векторы, такие, что столбец
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.]]) -
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.15.4/reference/generated/numpy.linalg.eig.html