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.
Примеры:
Сохранение двух полос матрицы 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Сохранение двух наддиагоналей матрицы 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