Функция linalg.qr
Функция linalg.qr выполняет QR-разложение матрицы.
Первым параметром функция принимает входной тензор,
представляющий матрицу или пакет матриц.
Вторым параметром можно передать режим разложения
full_matrices, который определяет размер
ортогональной матрицы.
QR-разложение представляет матрицу A в виде
произведения двух матриц: A = QR,
где Q - ортогональная матрица,
а R - верхняя треугольная матрица.
Функция возвращает кортеж из двух тензоров.
Синтаксис
tf.linalg.qr(input, full_matrices=False, name=None)
Пример
Давайте выполним QR-разложение для квадратной матрицы:
import tensorflow as tf
t = tf.constant([[1.0, 2.0], [3.0, 4.0]])
q, r = tf.linalg.qr(t)
print("Q:")
print(q)
print("R:")
print(r)
Результат выполнения кода:
Q:
tf.Tensor(
[[-0.31622776 -0.9486833 ]
[-0.9486833 0.31622776]], shape=(2, 2), dtype=float32)
R:
tf.Tensor(
[[-3.1622777 -4.4271884]
[ 0. 0.6324555]], shape=(2, 2), dtype=float32)
Пример
Давайте проверим, что произведение Q и R
восстанавливает исходную матрицу:
import tensorflow as tf
t = tf.constant([[1.0, 2.0], [3.0, 4.0]])
q, r = tf.linalg.qr(t)
res = tf.matmul(q, r)
print(res)
Результат выполнения кода:
tf.Tensor(
[[1. 2.]
[3. 4.]], shape=(2, 2), dtype=float32)
Пример
Давайте выполним QR-разложение для прямоугольной матрицы
с режимом full_matrices=False:
import tensorflow as tf
t = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
q, r = tf.linalg.qr(t, full_matrices=False)
print("Q:")
print(q)
print("R:")
print(r)
Результат выполнения кода:
Q:
tf.Tensor(
[[-0.24253564 -0.97014254]
[-0.97014254 0.24253564]], shape=(2, 2), dtype=float32)
R:
tf.Tensor(
[[-4.1231055 -5.335783 -6.548461 ]
[ 0. 0.24253564 0.4850713 ]], shape=(2, 3), dtype=float32)
Пример
Давайте выполним QR-разложение для пакета матриц:
import tensorflow as tf
t = tf.constant([[[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0], [7.0, 8.0]]])
q, r = tf.linalg.qr(t)
print("Q:")
print(q)
print("R:")
print(r)
Результат выполнения кода:
Q:
tf.Tensor(
[[[-0.31622776 -0.9486833 ]
[-0.9486833 0.31622776]]
[[-0.5812382 -0.81373346]
[-0.81373346 0.5812382 ]]], shape=(2, 2, 2), dtype=float32)
R:
tf.Tensor(
[[[-3.1622777 -4.4271884]
[ 0. 0.6324555]]
[[-8.602325 -9.765361 ]
[ 0. 0.2324953]]], shape=(2, 2, 2), dtype=float32)