Spec-Zone.ru › PyTorch 2

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-разложение может быть некорректным, и его автоматическая дифференциация может потерпеть неудачу или произвести неверные результаты.

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

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

Returns

Именованный кортеж (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)

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

Spec-Zone.ru

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