Spec-Zone.ru › TensorFlow 2.3

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

Spec-Zone.ru

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