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 строки соответствуют диагонали до K - 1-й диагонали (диагональ — верхняя строка), если lower равно True, и в противном случае K - 1-й наддиагонали до диагонали (диагональ — нижняя строка), если lower равно False. Полосы хранятся с выравниванием 'LEFT_RIGHT', где наддиагонали дополняются справа, а поддиагонали — слева. Это выравнивание использует cuSPARSE. Более подробную информацию см. в tf.linalg.set_diag. |
rhs | Тензор формы [..., M] или [..., M, N] с тем же типом данных, что и diagonals. Обратите внимание, что если форма rhs и/или diags статически неизвестна, rhs будет обрабатываться как матрица, а не как вектор. |
lower | Необязательный параметр bool. По умолчанию True. Логическое значение, указывающее, представляет ли bands нижнюю или верхнюю треугольную матрицу. |
adjoint | Необязательный параметр bool. По умолчанию False. Логическое значение, указывающее, следует ли решать с сопряжённой блочно-матрицей. |
name | Имя для этой операции Op (необязательно). |
| Возвращаемое значение | |
|---|---|
| Тензор формы [..., M] или [..., M, N] с решениями. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/linalg/banded_triangular_solve