torch.linalg.lstsq
-
torch.linalg.lstsq(A, B, rcond=None, *, driver=None)[source] -
Вычисляет решение задачи наименьших квадратов для системы линейных уравнений.
Пусть — это или , тогда задача наименьших квадратов для линейной системы , где , определяется следующим образом:
где обозначает норму Фробениуса.
Поддерживаются входные данные типов float, double, cfloat и cdouble. Также поддерживаются пакеты матриц; если входные данные представляют собой пакеты матриц, выходные данные имеют те же размеры пакета.
driverвыбирает используемую функцию бэкенда. Для входных данных на CPU допустимы значения‘gels’,‘gelsy’,‘gelsd,‘gelss’. При выборе оптимального драйвера для CPU учитывайте следующее:-
Если
Aхорошо обусловлена (её число обусловленности не слишком велико) или вас не беспокоит некоторая потеря точности.- Для матрицы общего вида:
‘gelsy’(QR-разложение с выбором ведущего элемента) (по умолчанию) - Если
Aимеет полный ранг:‘gels’(QR-разложение)
- Для матрицы общего вида:
-
Если
Aплохо обусловлена.-
‘gelsd’(тридиагональное приведение и SVD) - Если возникают проблемы с памятью:
‘gelss’(полное SVD).
-
Для входных данных CUDA допустим только драйвер
‘gels’, который предполагает, чтоAимеет полный ранг.См. также полное описание этих драйверов
rcondиспользуется для определения эффективного ранга матриц вA, еслиdriverимеет одно из значений (‘gelsy’,‘gelsd’,‘gelss’). В этом случае, если — сингулярные значенияAв порядке убывания, то будет округлено до нуля, если . Еслиrcond= None(по умолчанию),rcondустанавливается равным машинной точности типа данныхA, умноженной наmax(m, n).Эта функция возвращает решение задачи и дополнительную информацию в виде именованного кортежа из четырёх тензоров
(solution, residuals, rank, singular_values). Для входных данныхA,Bформы(*, m, n),(*, m, k)соответственно, он содержит:-
solution: решение задачи наименьших квадратов. Его форма —(*, n, k). -
residuals: квадраты невязок решений, то есть . Его форма —(*, k). Он вычисляется, еслиm > nи каждая матрица вAимеет полный ранг; в противном случае возвращается пустой тензор. ЕслиA— пакет матриц и хотя бы одна матрица в пакете не имеет полного ранга, возвращается пустой тензор. Это поведение может измениться в одном из будущих выпусков PyTorch. -
rank: тензор рангов матриц вA. Его форма совпадает с размерами пакетаA. Он вычисляется, еслиdriverимеет одно из значений (‘gelsy’,‘gelsd’,‘gelss’); в противном случае возвращается пустой тензор. -
singular_values: тензор сингулярных значений матриц вA. Его форма —(*, min(m, n)). Он вычисляется, еслиdriverимеет одно из значений (‘gelsd’,‘gelss’); в противном случае возвращается пустой тензор.
Примечание
Эта функция вычисляет
X =A.pinverse() @Bбыстрее и с большей численной устойчивостью, чем при выполнении вычислений по отдельности.Предупреждение
Значение
rcondпо умолчанию может измениться в одном из будущих выпусков PyTorch. Поэтому рекомендуется использовать фиксированное значение, чтобы избежать потенциальных нарушений совместимости.- Параметры:
-
-
A (Tensor) – тензор левой части формы
(*, m, n), где*— ноль или более измерений пакета. -
B (Tensor) – тензор правой части формы
(*, m, k), где*— ноль или более измерений пакета. -
rcond (float, необязательный) – используется для определения эффективного ранга
A. Еслиrcond= None,rcondустанавливается равным машинной точности типа данныхA, умноженной наmax(m, n). По умолчанию:None.
-
A (Tensor) – тензор левой части формы
- Именованные аргументы:
-
driver (str, необязательный) – имя используемого метода LAPACK/MAGMA. Если
None, для входных данных CPU используется‘gelsy’, а для входных данных CUDA —‘gels’. По умолчанию:None. - Возвращает:
-
Именованный кортеж
(solution, residuals, rank, singular_values).
Примеры:
>>> A = torch.randn(1,3,3) >>> A tensor([[[-1.0838, 0.0225, 0.2275], [ 0.2438, 0.3844, 0.5499], [ 0.1175, -0.9102, 2.0870]]]) >>> B = torch.randn(2,3,3) >>> B tensor([[[-0.6772, 0.7758, 0.5109], [-1.4382, 1.3769, 1.1818], [-0.3450, 0.0806, 0.3967]], [[-1.3994, -0.1521, -0.1473], [ 1.9194, 1.0458, 0.6705], [-1.1802, -0.9796, 1.4086]]]) >>> X = torch.linalg.lstsq(A, B).solution # A is broadcasted to shape (2, 3, 3) >>> torch.dist(X, torch.linalg.pinv(A) @ B) tensor(1.5152e-06) >>> S = torch.linalg.lstsq(A, B, driver='gelsd').singular_values >>> torch.dist(S, torch.linalg.svdvals(A)) tensor(2.3842e-07) >>> A[:, 0].zero_() # Decrease the rank of A >>> rank = torch.linalg.lstsq(A, B).rank >>> rank tensor([2]) -
© 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.lstsq.html