Spec-Zone.ru › TensorFlow

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 Tensor, описывающая полосы левой части уравнения, с формой [..., K, M]. Строки K соответствуют диагонали до K - 1-й диагонали (диагональ — верхняя строка), когда lower равно True, а иначе от K - 1-й наддиагонали до диагонали (диагональ — нижняя строка), когда lower равно False. Полосы хранятся с выравниванием 'LEFT_RIGHT', где наддиагонали заполняются справа, а поддиагонали — слева. Это выравнивание используется в cuSPARSE. Подробнее см. tf.linalg.set_diag.
rhs Tensor формы [..., M] или [..., M, N] и того же типа данных, что и diagonals. Если форма rhs и/или diags статически не известна, rhs будет рассматриваться как матрица, а не вектор.
lower Необязательный bool. По умолчанию True. Булево значение, указывающее, является ли bands нижней или верхней треугольной матрицей.
adjoint Необязательный bool. По умолчанию False. Булево значение, указывающее, нужно ли решать с сопряжённой по блокам матрицей.
name Имя для этой Op (необязательно).
Возвращаемые значения
Tensor формы [..., 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/api_docs/python/tf/linalg/banded_triangular_solve

Spec-Zone.ru

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