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