torch.linalg.qr
-
torch.linalg.qr(A, mode='reduced', *, out=None)[исходный код] -
Вычисляет QR-разложение матрицы.
Пусть обозначает или . Полное QR-разложение матрицы определяется следующим образом:
где является ортогональной в вещественном случае и унитарной в комплексном случае, а — верхнетреугольной матрицей с вещественными элементами на диагонали (даже в комплексном случае).
Когда
m > n(высокая матрица), посколькуRявляется верхнетреугольной, её последниеm - nстрок равны нулю. В этом случае можно отбросить последниеm - nстолбцовQ, чтобы получить сокращённое QR-разложение:Сокращённое 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-разложение может быть некорректным, а автоматическое дифференцирование может завершиться с ошибкой или дать неправильные результаты.- Параметры:
- Именованные аргументы:
-
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