Spec-Zone.ru › PyTorch 2

torch.linalg.cond

torch.linalg.cond(A, p=None, *, out=None) → Tensor

Вычисляет число обусловленности матрицы относительно матричной нормы.

Пусть K\mathbb{K} — R\mathbb{R} или C\mathbb{C}. Число обусловленности κ\kappa матрицы A∈Kn×nA \in \mathbb{K}^{n \times n} определяется как

κ(A)=∥A∥p∥A−1∥p\kappa(A) = \|A\|_p\|A^{-1}\|_p

Число обусловленности A характеризует числовую устойчивость линейной системы AX = B относительно матричной нормы.

Поддерживает входные типы данных float, double, cfloat и cdouble. Также поддерживает пакетные матрицы, и если A является пакетом матриц, то выходные данные имеют те же пакетные размерности.

p определяет матричную норму, которая вычисляется. Поддерживаются следующие нормы:

p

матричная норма

None

норма 2-норма (наибольшее сингулярное значение)

‘fro’

норма Фробениуса

‘nuc’

ядерная норма

inf

max(sum(abs(x), dim=1))

-inf

min(sum(abs(x), dim=1))

1

max(sum(abs(x), dim=0))

-1

min(sum(abs(x), dim=0))

2

наибольшее сингулярное значение

-2

наименьшее сингулярное значение

где inf относится к float(‘inf’), объекту inf NumPy или любому эквивалентному объекту.

Для p — это одна из (‘fro’, ‘nuc’, inf, -inf, 1, -1), эта функция использует torch.linalg.norm() и torch.linalg.inv(). Таким образом, в этом случае матрица (или каждая матрица в пакете) A должна быть квадратной и обратимой.

Для p в (2, -2), эту функцию можно вычислить в терминах сингулярных значений σ1≥…≥σn\sigma_1 \geq \ldots \geq \sigma_n

κ2(A)=σ1σnκ−2(A)=σnσ1\kappa_2(A) = \frac{\sigma_1}{\sigma_n}\qquad \kappa_{-2}(A) = \frac{\sigma_n}{\sigma_1}

В этих случаях вычисление выполняется с помощью torch.linalg.svdvals(). Для этих норм матрица (или каждая матрица в пакете) A может иметь любую форму.

Примечание

При использовании входных данных на устройстве CUDA эта функция синхронизирует это устройство с процессором, если p является одним из (‘fro’, ‘nuc’, inf, -inf, 1, -1).

См. также

torch.linalg.solve() для функции, решающей линейные системы квадратных матриц.

torch.linalg.lstsq() для функции, решающей линейные системы общих матриц.

Параметры
  • A (Tensor) – тензор формы (*, m, n) где * — ноль или более пакетных размерностей для p в (2, -2), и формы (*, n, n) , где каждая матрица обратима для p в (‘fro’, ‘nuc’, inf, -inf, 1, -1).
  • p (int, inf, -inf, 'fro', 'nuc', optional) – тип матричной нормы для использования в вычислениях (см. выше). По умолчанию: None
Ключевые аргументы

out (Tensor, optional) – выходной тензор. Игнорируется, если None. По умолчанию: None.

Возвращает

Вещественный тензор, даже если A комплексный.

Возбуждает

RuntimeError – если p является одним из (‘fro’, ‘nuc’, inf, -inf, 1, -1) и матрица A или любая матрица в пакете A не является квадратной или необратимой.

Примеры:

>>> A = torch.randn(3, 4, 4, dtype=torch.complex64)
>>> torch.linalg.cond(A)
>>> A = torch.tensor([[1., 0, -1], [0, 1, 0], [1, 0, 1]])
>>> torch.linalg.cond(A)
tensor([1.4142])
>>> torch.linalg.cond(A, 'fro')
tensor(3.1623)
>>> torch.linalg.cond(A, 'nuc')
tensor(9.2426)
>>> torch.linalg.cond(A, float('inf'))
tensor(2.)
>>> torch.linalg.cond(A, float('-inf'))
tensor(1.)
>>> torch.linalg.cond(A, 1)
tensor(2.)
>>> torch.linalg.cond(A, -1)
tensor(1.)
>>> torch.linalg.cond(A, 2)
tensor([1.4142])
>>> torch.linalg.cond(A, -2)
tensor([0.7071])

>>> A = torch.randn(2, 3, 3)
>>> torch.linalg.cond(A)
tensor([[9.5917],
        [3.2538]])
>>> A = torch.randn(2, 3, 3, dtype=torch.complex64)
>>> torch.linalg.cond(A)
tensor([[4.6245],
        [4.5671]])

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.linalg.cond.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API