РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
275 of 769 menu

Функция linalg.eigh

Функция torch.linalg.eigh вычисляет собственные значения и собственные векторы для эрмитовых (самосопряженных) матриц. Для вещественных матриц это эквивалентно симметричным матрицам. Функция возвращает кортеж (eigenvalues, eigenvectors), где собственные значения упорядочены по возрастанию. Первым параметром передается тензор матрицы, вторым - строка UPLO, которая указывает, какую часть матрицы использовать (верхнюю или нижнюю треугольную).

Синтаксис

torch.linalg.eigh(input, UPLO='L', *, out=None)

Параметры

input (Tensor) - входная эрмитова (симметричная) матрица или пакет матриц размерностью (*, n, n), где * - любое количество пакетных измерений.

UPLO (str, опционально) - указывает, какую часть матрицы использовать для вычислений: 'L' (нижняя треугольная, по умолчанию) или 'U' (верхняя треугольная). Остальная часть матрицы игнорируется.

out (tuple, опционально) - кортеж из двух тензоров для записи результата. Если передан, то функция не создает новые тензоры, а записывает результат в переданные.

Пример с матрицей 2x2

Рассмотрим простейший пример вычисления собственных значений и векторов для симметричной матрицы 2x2:

import torch t = torch.tensor([ [1.0, 2.0], [2.0, 1.0], ]) values, vectors = torch.linalg.eigh(t) print("Собственные значения:") print(values) print("Собственные векторы:") print(vectors)

Результат выполнения кода:

Собственные значения: tensor([-1., 3.]) Собственные векторы: tensor([[-0.7071, 0.7071], [ 0.7071, 0.7071]])

Пример с матрицей 3x3

Выполним вычисления для симметричной матрицы 3x3:

import torch t = torch.tensor([ [4.0, 1.0, 2.0], [1.0, 3.0, 1.0], [2.0, 1.0, 5.0], ]) values, vectors = torch.linalg.eigh(t) print("Собственные значения:") print(values) print("Собственные векторы:") print(vectors)

Результат выполнения кода:

Собственные значения: tensor([1.7321, 4.0000, 6.2679]) Собственные векторы: tensor([[-0.5734, -0.4082, 0.7104], [ 0.7523, -0.8165, 0.1683], [-0.3250, 0.4082, 0.6835]])

Пример с использованием верхней треугольной части

При использовании параметра UPLO='U' функция будет использовать верхнюю треугольную часть матрицы:

import torch t = torch.tensor([ [3.0, 1.0], [1.0, 3.0], ]) values, vectors = torch.linalg.eigh(t, UPLO='U') print("Собственные значения:") print(values) print("Собственные векторы:") print(vectors)

Результат выполнения кода:

Собственные значения: tensor([2., 4.]) Собственные векторы: tensor([[-0.7071, 0.7071], [ 0.7071, 0.7071]])

Пример с пакетом матриц

Функция linalg.eigh поддерживает пакетные вычисления для нескольких матриц одновременно:

import torch t = torch.tensor([ [ [2.0, 0.0], [0.0, 2.0], ], [ [1.0, 1.0], [1.0, 1.0], ], ]) values, vectors = torch.linalg.eigh(t) print("Собственные значения (пакет):") print(values) print("Собственные векторы (пакет):") print(vectors)

Результат выполнения кода:

Собственные значения (пакет): tensor([[2., 2.], [0., 2.]]) Собственные векторы (пакет): tensor([[[1., 0.], [0., 1.]], [[-0.7071, 0.7071], [ 0.7071, 0.7071]]])

Смотрите также

  • функцию eig,
    которая вычисляет собственные значения и векторы для произвольных матриц
  • функцию eigvals,
    которая вычисляет только собственные значения матрицы
  • функцию svd,
    которая выполняет сингулярное разложение матрицы
  • функцию cholesky,
    которая выполняет разложение Холецкого для эрмитовых матриц
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить