numpy.linalg.eigh#
- linalg.eigh(a, UPLO='L')[источник]#
Возвращает собственные значения и собственные векторы комплексной эрмитовой (сопряжённо-симметричной) или вещественной симметричной матрицы.
Возвращает два объекта: одномерный массив, содержащий собственные значения a, и 2-D квадратный массив или матрица (в зависимости от типа входных данных) соответствующих собственных векторов (в столбцах).
- Параметры:
- a(…, M, M) массив
Эрмитовы или вещественные симметричные матрицы, для которых вычисляются собственные значения и собственные векторы.
- UPLO{‘L’, ‘U’}, необязательно
Указывает, выполняется ли вычисление с нижней треугольной частью a ('L', по умолчанию) или верхняя треугольная часть ('U'). Независимо от этого значения в вычислениях будут учитываться только действительные части диагонали, чтобы сохранить понятие эрмитовой матрицы. Следовательно, мнимая часть диагонали всегда будет рассматриваться как ноль.
- Возвращает:
- Именованный кортеж со следующими атрибутами:
- собственные значения(…, M) ndarray
Собственные значения в порядке возрастания, каждое повторяется в соответствии с его кратностью.
- собственные векторы{(…, M, M) ndarray, (…, M, M) matrix}
Столбец
eigenvectors[:, i]является нормированным собственным вектором, соответствующим собственному значениюeigenvalues[i]. Вернёт объект матрицы, если a является объектом матрицы.
- Вызывает:
- LinAlgError
Если вычисление собственных значений не сходится.
Смотрите также
eigvalshсобственные значения вещественных симметричных или комплексных эрмитовых (сопряжённо-симметричных) массивов.
eigсобственные значения и правые собственные векторы для несимметричных массивов.
eigvalsсобственные значения несимметричных массивов.
scipy.linalg.eighПохожая функция в SciPy (но также решает обобщенную проблему собственных значений).
Примечания
Применяются правила трансляции, см.
numpy.linalgдокументации для подробностей.Собственные значения/собственные векторы вычисляются с использованием подпрограмм LAPACK
_syevd,_heevd.Собственные значения вещественных симметричных или комплексных эрмитовых матриц всегда вещественны. [1] Массив собственные значения из (столбцов) собственных векторов является унитарной и a, собственные значения, и собственные векторы удовлетворяют уравнениям
dot(a, eigenvectors[:, i]) = eigenvalues[i] * eigenvectors[:, i].Ссылки
[1]G. Strang, Linear Algebra and Its Applications, 2-е изд., Орландо, Флорида, Academic Press, Inc., 1980, стр. 222.
Примеры
>>> import numpy as np >>> from numpy import linalg as LA >>> a = np.array([[1, -2j], [2j, 5]]) >>> a array([[ 1.+0.j, -0.-2.j], [ 0.+2.j, 5.+0.j]]) >>> eigenvalues, eigenvectors = LA.eigh(a) >>> eigenvalues array([0.17157288, 5.82842712]) >>> eigenvectors array([[-0.92387953+0.j , -0.38268343+0.j ], # may vary [ 0. +0.38268343j, 0. -0.92387953j]])
>>> (np.dot(a, eigenvectors[:, 0]) - ... eigenvalues[0] * eigenvectors[:, 0]) # verify 1st eigenval/vec pair array([5.55111512e-17+0.0000000e+00j, 0.00000000e+00+1.2490009e-16j]) >>> (np.dot(a, eigenvectors[:, 1]) - ... eigenvalues[1] * eigenvectors[:, 1]) # verify 2nd eigenval/vec pair array([0.+0.j, 0.+0.j])
>>> A = np.matrix(a) # what happens if input is a matrix object >>> A matrix([[ 1.+0.j, -0.-2.j], [ 0.+2.j, 5.+0.j]]) >>> eigenvalues, eigenvectors = LA.eigh(A) >>> eigenvalues array([0.17157288, 5.82842712]) >>> eigenvectors matrix([[-0.92387953+0.j , -0.38268343+0.j ], # may vary [ 0. +0.38268343j, 0. -0.92387953j]])
>>> # demonstrate the treatment of the imaginary part of the diagonal >>> a = np.array([[5+2j, 9-2j], [0+2j, 2-1j]]) >>> a array([[5.+2.j, 9.-2.j], [0.+2.j, 2.-1.j]]) >>> # with UPLO='L' this is numerically equivalent to using LA.eig() with: >>> b = np.array([[5.+0.j, 0.-2.j], [0.+2.j, 2.-0.j]]) >>> b array([[5.+0.j, 0.-2.j], [0.+2.j, 2.+0.j]]) >>> wa, va = LA.eigh(a) >>> wb, vb = LA.eig(b) >>> wa array([1., 6.]) >>> wb array([6.+0.j, 1.+0.j]) >>> va array([[-0.4472136 +0.j , -0.89442719+0.j ], # may vary [ 0. +0.89442719j, 0. -0.4472136j ]]) >>> vb array([[ 0.89442719+0.j , -0. +0.4472136j], [-0. +0.4472136j, 0.89442719+0.j ]])