Spec-Zone.ru › PyTorch 1

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 (Тензор) – тензор формы (*, m, n) где * — ноль или более размерностей пакета.
  • mode (str, необязательно) – одно из ‘reduced’, ‘complete’, ‘r’. Управляет формой возвращаемых тензоров. По умолчанию: ‘reduced’.
Ключевые аргументы:

out (кортеж, необязательно) – кортеж выходных тензоров. Игнорируется, если 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)

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

Spec-Zone.ru

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