numpy.linalg.eig#
- linalg.eig(a)[источник]#
Вычислить собственные значения и правые собственные векторы квадратного массива.
- Параметры:
- a(…, M, M) массив
Матрицы, для которых будут вычислены собственные значения и правые собственные векторы
- Возвращает:
- Именованный кортеж со следующими атрибутами:
- собственные значения(…, M) массив
Собственные значения, каждое повторяется в соответствии со своей кратностью. Собственные значения не обязательно упорядочены. Результирующий массив будет иметь комплексный тип, если только мнимая часть не равна нулю, в этом случае он будет приведён к вещественному типу. Когда a является ли действительным, то результирующие собственные значения будут действительными (мнимая часть 0) или встречаться в сопряжённых парах
- собственные векторы(…, M, M) массив
Нормализованные (единичной «длины») собственные векторы, такие что столбец
eigenvectors[:,i]является собственным вектором, соответствующим собственному значениюeigenvalues[i].
- Вызывает:
- LinAlgError
Если вычисление собственных значений не сходится.
Смотрите также
eigvalsсобственные значения несимметричного массива.
eighсобственные значения и собственные векторы вещественной симметричной или комплексной эрмитовой (сопряженно-симметричной) матрицы.
eigvalshсобственные значения вещественной симметричной или комплексной эрмитовой (сопряженно-симметричной) матрицы.
scipy.linalg.eigАналогичная функция в SciPy, которая также решает обобщённую проблему собственных значений.
scipy.linalg.schurЛучший выбор для унитарных и других неэрмитовых нормальных матриц.
Примечания
Применяются правила трансляции, см.
numpy.linalgдокументации для подробностей.Это реализовано с использованием
_geevПодпрограммы LAPACK, которые вычисляют собственные значения и собственные векторы общих квадратных массивов.Число w является собственным значением a если существует вектор v такой, что
a @ v = w * v. Таким образом, массивы a, собственные значения, и собственные векторы удовлетворяют уравнениямa @ eigenvectors[:,i] = eigenvalues[i] * eigenvectors[:,i]для \(i \in \{0,...,M-1\}\).Массив собственные векторы может не иметь максимального ранга, то есть некоторые столбцы могут быть линейно зависимыми, хотя ошибки округления могут скрывать этот факт. Если все собственные значения различны, то теоретически собственные векторы линейно независимы и a может быть диагонализирована с помощью преобразования подобия, используя собственные векторы, т.е.,
inv(eigenvectors) @ a @ eigenvectorsявляется диагональным.Для неэрмитовых нормальных матриц функция SciPy
scipy.linalg.schurпредпочтительнее, потому что матрица собственные векторы гарантированно является унитарным, что не так при использованииeig. Факторизация Шура производит верхнюю треугольную матрицу, а не диагональную, но для нормальных матриц нужна только диагональ верхней треугольной матрицы, остальное — ошибка округления.Наконец, подчёркивается, что собственные векторы состоит из правый (как в правой части) собственные векторы a. Вектор y удовлетворяющий
y.T @ a = z * y.Tдля некоторого числа z называется left собственный вектор a, и, в общем случае, левые и правые собственные векторы матрицы не обязательно являются (возможно, сопряженными) транспонированными друг друга.Ссылки
G. Strang, Linear Algebra and Its Applications, 2-е изд., Орландо, Флорида, Academic Press, Inc., 1980, различные стр.
Примеры
>>> import numpy as np >>> from numpy import linalg as LA
(Почти) тривиальный пример с действительными собственными значениями и собственными векторами.
>>> eigenvalues, eigenvectors = LA.eig(np.diag((1, 2, 3))) >>> eigenvalues array([1., 2., 3.]) >>> eigenvectors array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
Вещественная матрица, обладающая комплексными собственными значениями и собственными векторами; обратите внимание, что собственные значения являются комплексно-сопряженными друг другу.
>>> eigenvalues, eigenvectors = LA.eig(np.array([[1, -1], [1, 1]])) >>> eigenvalues array([1.+1.j, 1.-1.j]) >>> eigenvectors array([[0.70710678+0.j , 0.70710678-0.j ], [0. -0.70710678j, 0. +0.70710678j]])
Комплекснозначная матрица с вещественными собственными значениями (но комплекснозначными собственными векторами); обратите внимание, что
a.conj().T == a, т.е., a является эрмитовой.>>> a = np.array([[1, 1j], [-1j, 1]]) >>> eigenvalues, eigenvectors = LA.eig(a) >>> eigenvalues array([2.+0.j, 0.+0.j]) >>> eigenvectors array([[ 0. +0.70710678j, 0.70710678+0.j ], # may vary [ 0.70710678+0.j , -0. +0.70710678j]])
Будьте осторожны с ошибками округления!
>>> a = np.array([[1 + 1e-9, 0], [0, 1 - 1e-9]]) >>> # Theor. eigenvalues are 1 +/- 1e-9 >>> eigenvalues, eigenvectors = LA.eig(a) >>> eigenvalues array([1., 1.]) >>> eigenvectors array([[1., 0.], [0., 1.]])