Spec-Zone.ru › TensorFlow 2.9

tf.linalg.banded_triangular_solve

Решает треугольные системы уравнений с помощью банд-алгоритма.

tf.linalg.banded_triangular_solve(
    bands, rhs, lower=True, adjoint=False, name=None
)

bands — это тензор формы [..., K, M], где K обозначает число хранимых полос. Это соответствует набору матриц M на M, у которых хранятся K поддиагоналей (когда lower равно True).

Этот оператор транслирует пакетные размеры bands и пакетные размеры rhs.

Примеры:

Хранение 2 полос 3x3 матрицы. Обратите внимание, что первый элемент во второй строке игнорируется из-за заполнения 'LEFT_RIGHT'.

x = [[2., 3., 4.], [1., 2., 3.]]
x2 = [[2., 3., 4.], [10000., 2., 3.]]
y = tf.zeros([3, 3])
z = tf.linalg.set_diag(y, x, align='LEFT_RIGHT', k=(-1, 0))
z
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[2., 0., 0.],
       [2., 3., 0.],
       [0., 3., 4.]], dtype=float32)>
soln = tf.linalg.banded_triangular_solve(x, tf.ones([3, 1]))
soln
<tf.Tensor: shape=(3, 1), dtype=float32, numpy=
array([[0.5 ],
       [0.  ],
       [0.25]], dtype=float32)>
are_equal = soln == tf.linalg.banded_triangular_solve(x2, tf.ones([3, 1]))
tf.reduce_all(are_equal).numpy()
True
are_equal = soln == tf.linalg.triangular_solve(z, tf.ones([3, 1]))
tf.reduce_all(are_equal).numpy()
True

Хранение 2 наддиагоналей 4x4 матрицы. Из-за заполнения 'LEFT_RIGHT' последний элемент первой строки игнорируется.

x = [[2., 3., 4., 5.], [-1., -2., -3., -4.]]
y = tf.zeros([4, 4])
z = tf.linalg.set_diag(y, x, align='LEFT_RIGHT', k=(0, 1))
z
<tf.Tensor: shape=(4, 4), dtype=float32, numpy=
array([[-1.,  2.,  0.,  0.],
       [ 0., -2.,  3.,  0.],
       [ 0.,  0., -3.,  4.],
       [ 0.,  0., -0., -4.]], dtype=float32)>
soln = tf.linalg.banded_triangular_solve(x, tf.ones([4, 1]), lower=False)
soln
<tf.Tensor: shape=(4, 1), dtype=float32, numpy=
array([[-4.       ],
       [-1.5      ],
       [-0.6666667],
       [-0.25     ]], dtype=float32)>
are_equal = (soln == tf.linalg.triangular_solve(
  z, tf.ones([4, 1]), lower=False))
tf.reduce_all(are_equal).numpy()
True
Аргументы
bands Описание полос левой части, с формой [..., K, M]. Строки K соответствуют диагонали до %%%CODE_BLOCK_17%%-й диагонали (диагональ — верхняя строка), когда lower равно True, и в противном случае — %%%CODE_BLOCK_20%%-й наддиагонали до диагонали (диагональ — нижняя строка), когда lower равно False. Полосы хранятся с выравниванием 'LEFT_RIGHT', где наддиагонали заполняются справа, а поддиагонали — слева. Это выравнивание используется в cuSPARSE. Подробнее см. tf.linalg.set_diag.
rhs Тензор формы [..., M] или [..., M, N] с тем же типом данных, что и diagonals. Обратите внимание, что если форма rhs и/или diags не известна статически, rhs будет обрабатываться как матрица, а не как вектор.
lower Необязательный флаг. По умолчанию True. Булево значение, указывающее, представляет ли bands нижнюю или верхнюю треугольную матрицу.
adjoint Необязательный флаг. По умолчанию False. Булево значение, указывающее, нужно ли решать с сопряжённой по блокам матрицей.
name Имя для этой операции (необязательно).
Возвращаемое значение
Тензор формы [..., M] или [..., M, N], содержащий решения.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/linalg/banded_triangular_solve

Spec-Zone.ru

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