eigh#
- scipy.linalg.eigh(a, b=None, *, lower=True, eigvals_only=False, overwrite_a=False, overwrite_b=False, тип=1, check_finite=True, subset_by_index=None, subset_by_value=None, драйвер=None)[источник]#
Решение стандартной или обобщённой проблемы собственных значений для комплексной эрмитовой или вещественной симметричной матрицы.
Найти массив собственных значений
wи, опционально, массив собственных векторовvмассиваa, гдеbположительно определена, так что для каждого собственного значения λ (i-й элемент w) и его собственного вектораvi(i-й столбецv) удовлетворяет:a @ vi = λ * b @ vi vi.conj().T @ a @ vi = λ vi.conj().T @ b @ vi = 1
В стандартной задаче,
bпредполагается единичной матрицей.Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.
- Параметры:
- a(M, M) array_like
Комплексная эрмитова или вещественная симметричная матрица, чьи собственные значения и собственные векторы будут вычислены.
- b(M, M) array_like, опционально
Комплексная эрмитова или вещественная симметричная положительно определенная матрица. Если опущена, предполагается единичная матрица.
- lowerbool, необязательно
Берутся ли соответствующие данные массива из нижнего или верхнего треугольника
aи, если применимо,b. (По умолчанию: lower)- eigvals_onlybool, необязательно
Следует ли вычислять только собственные значения и без собственных векторов. (По умолчанию: вычисляются и то, и другое)
- subset_by_indexiterable, optional
Если предоставлен, этот двухэлементный итерируемый объект определяет начальный и конечный индексы желаемых собственных значений (по возрастанию и с нумерацией с 0). Чтобы вернуть только второе наименьшее до пятого наименьшего собственных значений,
[1, 4]используется.[n-3, n-1]возвращает три наибольших. Доступно только с драйверами “evr”, “evx” и “gvx”. Элементы непосредственно преобразуются в целые числа черезint().- subset_by_valueiterable, optional
Если предоставлено, этот двухэлементный итерируемый объект определяет полуоткрытый интервал
(a, b]что, если есть, только собственные значения между этими значениями возвращаются. Доступно только с драйверами "evr", "evx" и "gvx". Используйтеnp.infдля незакреплённых концов.- драйверstr, optional
Определяет, какой драйвер LAPACK должен использоваться. Допустимые варианты: "ev", "evd", "evr", "evx" для стандартных задач и "gv", "gvd", "gvx" для обобщённых (где b не None) задач. См. раздел "Примечания". По умолчанию для стандартных задач используется "evr". Для обобщённых задач "gvd" используется для полного набора, а "gvx" для запрошенных подмножеств.
- типint, необязательный
Для обобщённых задач этот ключевой параметр определяет тип решаемой задачи для
wиv(принимает только 1, 2, 3 в качестве возможных входных данных):1 => a @ v = w @ b @ v 2 => a @ b @ v = w @ v 3 => b @ a @ v = w @ v
Этот ключевой параметр игнорируется для стандартных задач.
- overwrite_abool, необязательно
Перезаписывать ли данные в
aс предоставленными параметрами конфигурации и другими подходящими настройками. В некоторых случаях доверительные пределы могут быть NaN из-за вырожденной повторной выборки, и это типично для очень маленьких выборок (~6 наблюдений).- overwrite_bbool, необязательно
Перезаписывать ли данные в
bс предоставленными параметрами конфигурации и другими подходящими настройками. В некоторых случаях доверительные пределы могут быть NaN из-за вырожденной повторной выборки, и это типично для очень маленьких выборок (~6 наблюдений).- check_finitebool, необязательно
Проверять ли, что входные матрицы содержат только конечные числа. Отключение может повысить производительность, но может привести к проблемам (сбоям, бесконечному выполнению), если входные данные содержат бесконечности или NaN.
- Возвращает:
- w(N,) ndarray
Выбранные N (N<=M) собственных значений в порядке возрастания, каждое повторяется согласно своей кратности.
- v(M, N) ndarray
Нормированный собственный вектор, соответствующий собственному значению
w[i]является столбцомv[:,i]. Возвращается только еслиeigvals_only=False.
- Вызывает:
- LinAlgError
Если вычисление собственных значений не сходится, произошла ошибка, или матрица b не является положительно определенной. Заметьте, что если входные матрицы не симметричны или не эрмитовы, ошибка не будет сообщена, но результаты будут неверными.
Смотрите также
eigvalshсобственные значения симметричных или эрмитовых массивов
eigсобственные значения и правые собственные векторы для несимметричных массивов
eigh_tridiagonalсобственные значения и правые собственные векторы для симметричных/эрмитовых трёхдиагональных матриц
Примечания
Эта функция не проверяет входной массив на эрмитовость/симметричность, чтобы позволить представление массивов только их верхними/нижними треугольными частями. Также обратите внимание, что даже если не учитывается, проверка конечности применяется ко всему массиву и не зависит от ключевого слова «lower».
Эта функция использует драйверы LAPACK для вычислений во всех возможных комбинациях ключевых слов с префиксом
syесли массивы вещественные иheесли комплексный, например, массив float с драйвером 'evr' решается через 'syevr', комплексные массивы с драйвером 'gvx' решаются через 'hegvx' и т.д.Вкратце, самый медленный и наиболее надежный драйвер — это классический
который использует симметричный QR.ev рассматривается как оптимальный выбор для наиболее общих случаев. Однако есть определённые случаи, когдаevr вычисляет быстрее за счет большего использования памяти.evd , оставаясь при этом быстрее, чемevx , часто работает хуже, чем остальные, за исключением случаев, когда требуется очень мало собственных значений для больших массивов, хотя гарантии производительности всё равно нет.ev Обратите внимание, что базовые алгоритмы LAPACK различаются в зависимости от того, eigvals_only равно True или False — поэтому собственные значения могут различаться в зависимости от того, запрашиваются ли собственные векторы или нет. Разница обычно составляет порядка машинного эпсилона, умноженного на наибольшее собственное значение, поэтому, вероятно, заметна только для нулевых или почти нулевых собственных значений.
Для обобщенной задачи, нормализация относительно заданного аргумента type:
type 1 and 3 : v.conj().T @ a @ v = w type 2 : inv(v).conj().T @ a @ inv(v) = w type 1 or 2 : v.conj().T @ b @ v = I type 3 : v.conj().T @ inv(b) @ v = I
Примеры
>>> import numpy as np >>> from scipy.linalg import eigh >>> A = np.array([[6, 3, 1, 5], [3, 0, 5, 1], [1, 5, 6, 2], [5, 1, 2, 2]]) >>> w, v = eigh(A) >>> np.allclose(A @ v - v @ np.diag(w), np.zeros((4, 4))) True
Запросить только собственные значения
>>> w = eigh(A, eigvals_only=True)
Запросить собственные значения, которые меньше 10.
>>> A = np.array([[34, -4, -10, -7, 2], ... [-4, 7, 2, 12, 0], ... [-10, 2, 44, 2, -19], ... [-7, 12, 2, 79, -34], ... [2, 0, -19, -34, 29]]) >>> eigh(A, eigvals_only=True, subset_by_value=[-np.inf, 10]) array([6.69199443e-07, 9.11938152e+00])
Запрос второго наименьшего собственного значения и его собственного вектора
>>> w, v = eigh(A, subset_by_index=[1, 1]) >>> w array([9.11938152]) >>> v.shape # only a single column is returned (5, 1)