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