Spec-Zone.ru › PyTorch 2.14

torch.linalg.qr

torch.linalg.qr(A, mode='reduced', *, out=None) [исходный код]

Вычисляет QR-разложение матрицы.

Пусть K\mathbb{K} обозначает R\mathbb{R} или C\mathbb{C}. Полное QR-разложение матрицы A∈Km×nA \in \mathbb{K}^{m \times n} определяется следующим образом:

A=QRQ∈Km×m,R∈Km×nA = QR\mathrlap{\qquad Q \in \mathbb{K}^{m \times m}, R \in \mathbb{K}^{m \times n}}

где QQ является ортогональной в вещественном случае и унитарной в комплексном случае, а RR — верхнетреугольной матрицей с вещественными элементами на диагонали (даже в комплексном случае).

Когда m > n (высокая матрица), поскольку R является верхнетреугольной, её последние m - n строк равны нулю. В этом случае можно отбросить последние m - n столбцов Q, чтобы получить сокращённое QR-разложение:

A=QRQ∈Km×n,R∈Kn×nA = QR\mathrlap{\qquad Q \in \mathbb{K}^{m \times n}, R \in \mathbb{K}^{n \times n}}

Сокращённое QR-разложение совпадает с полным QR-разложением, когда n >= m (широкая матрица).

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

Параметр mode позволяет выбрать полное или сокращённое QR-разложение. Если A имеет форму (*, m, n), где k = min(m, n)

  • mode= ‘reduced’ (по умолчанию): возвращает (Q, R) с формами (*, m, k), (*, k, n) соответственно. Всегда поддерживает дифференцирование.
  • mode= ‘complete’: возвращает (Q, R) с формами (*, m, m), (*, m, n) соответственно. Поддерживает дифференцирование для m <= n.
  • mode= ‘r’: вычисляет только сокращённое R. Возвращает (Q, R), у которого Q пусто, и R с формой (*, k, n). Дифференцирование не поддерживается.

Отличия от numpy.linalg.qr:

  • mode= ‘raw’ не реализовано.
  • В отличие от numpy.linalg.qr, эта функция всегда возвращает кортеж из двух тензоров. Когда mode= ‘r’, тензор Q пуст.

Предупреждение

Элементы на диагонали R не обязательно положительны. Поэтому QR-разложение, возвращаемое функцией, определено с точностью до знака элементов диагонали R. В результате на разных платформах, например в NumPy, или для входных данных на разных устройствах могут получаться разные допустимые разложения.

Предупреждение

QR-разложение корректно определено только в том случае, если первые k = min(m, n) столбцов каждой матрицы в A линейно независимы. Если это условие не выполнено, ошибка не возникнет, однако полученное QR-разложение может быть некорректным, а автоматическое дифференцирование может завершиться с ошибкой или дать неправильные результаты.

Параметры:
  • A (Tensor) – тензор формы (*, m, n), где * обозначает ноль или более пакетных измерений.
  • mode (str, необязательный) – одно из значений ‘reduced’, ‘complete’, ‘r’. Определяет форму возвращаемых тензоров. По умолчанию: ‘reduced’.
Именованные аргументы:

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

Возвращает:

Именованный кортеж (Q, R).

Примеры:

>>> A = torch.tensor([[12., -51, 4], [6, 167, -68], [-4, 24, -41]])
>>> Q, R = torch.linalg.qr(A)
>>> Q
tensor([[-0.8571,  0.3943,  0.3314],
        [-0.4286, -0.9029, -0.0343],
        [ 0.2857, -0.1714,  0.9429]])
>>> R
tensor([[ -14.0000,  -21.0000,   14.0000],
        [   0.0000, -175.0000,   70.0000],
        [   0.0000,    0.0000,  -35.0000]])
>>> (Q @ R).round()
tensor([[  12.,  -51.,    4.],
        [   6.,  167.,  -68.],
        [  -4.,   24.,  -41.]])
>>> (Q.T @ Q).round()
tensor([[ 1.,  0.,  0.],
        [ 0.,  1., -0.],
        [ 0., -0.,  1.]])
>>> Q2, R2 = torch.linalg.qr(A, mode='r')
>>> Q2
tensor([])
>>> torch.equal(R, R2)
True
>>> A = torch.randn(3, 4, 5)
>>> Q, R = torch.linalg.qr(A, mode='complete')
>>> torch.dist(Q @ R, A)
tensor(1.6099e-06)
>>> torch.dist(Q.mT @ Q, torch.eye(4))
tensor(6.2158e-07)

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

Spec-Zone.ru

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