Функция linalg.qr
Функция linalg.qr выполняет QR-разложение матрицы или пакета матриц.
QR-разложение представляет матрицу в виде произведения ортогональной матрицы
и верхнетреугольной матрицы. Первым параметром функция принимает тензор,
вторым параметром можно указать режим разложения.
Функция возвращает кортеж из двух тензоров: ортогональной матрицы Q
и верхнетреугольной матрицы R.
Синтаксис
torch.linalg.qr(A, mode='reduced')
Параметры функции:
-
A- тензор формы (..., M, N), содержащий матрицы для разложения -
mode- режим разложения: 'reduced' (по умолчанию), 'r' или 'complete'
Пример
Давайте выполним QR-разложение квадратной матрицы размером 3x3:
import torch
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0],
])
Q, R = torch.linalg.qr(t)
print("Q:")
print(Q)
print("R:")
print(R)
Результат выполнения кода:
Q:
tensor([
[-0.1231, -0.9045, 0.4082],
[-0.4924, -0.3015, -0.8165],
[-0.8616, 0.3015, 0.4082],
])
R:
tensor([
[-8.1240, -9.6011, -11.0782],
[ 0.0000, 0.9045, 1.8091],
[ 0.0000, 0.0000, 0.0000],
])
Пример
Выполним QR-разложение с режимом 'r', который возвращает только матрицу R:
import torch
t = torch.tensor([
[1.0, 2.0],
[3.0, 4.0],
[5.0, 6.0],
])
R = torch.linalg.qr(t, mode='r')
print(R)
Результат выполнения кода:
tensor([
[-5.9161, -7.4374],
[ 0.0000, 0.8291],
])
Пример
Выполним полное QR-разложение (режим 'complete') для матрицы 2x3:
import torch
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
Q, R = torch.linalg.qr(t, mode='complete')
print("Q форма:", Q.shape)
print("R форма:", R.shape)
print("Q:")
print(Q)
print("R:")
print(R)
Результат выполнения кода:
Q форма: torch.Size([2, 2])
R форма: torch.Size([2, 3])
Q:
tensor([
[-0.2425, -0.9701],
[-0.9701, 0.2425],
])
R:
tensor([
[-4.1231, -5.3358, -6.5484],
[ 0.0000, 0.7276, 1.4552],
])
Пример
Выполним QR-разложение для пакета матриц 3x3:
import torch
torch.manual_seed(0)
t = torch.randn(2, 3, 3)
Q, R = torch.linalg.qr(t)
print("Q форма:", Q.shape)
print("R форма:", R.shape)
print("Q[0]:")
print(Q[0])
print("R[0]:")
print(R[0])
Результат выполнения кода:
Q форма: torch.Size([2, 3, 3])
R форма: torch.Size([2, 3, 3])
Q[0]:
tensor([
[-0.3307, -0.7600, -0.5597],
[-0.4142, -0.2394, 0.8781],
[ 0.8480, -0.6045, -0.0110],
])
R[0]:
tensor([
[-1.7535, 0.5795, -0.7836],
[ 0.0000, 1.4658, 0.5389],
[ 0.0000, 0.0000, -1.1948],
])