Spec-Zone.ru › TensorFlow 2.4

tf.linalg.LinearOperatorBlockLowerTriangular

Объединяет LinearOperators в блочно-нижнетриугольную матрицу.

Наследуется от: LinearOperator, Module

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.linalg.LinearOperatorBlockLowerTriangular

tf.linalg.LinearOperatorBlockLowerTriangular(
    operators, is_non_singular=None, is_self_adjoint=None,
    is_positive_definite=None, is_square=None,
    name='LinearOperatorBlockLowerTriangular'
)

Этот оператор инициализируется вложенным списком линейных операторов, которые объединяются в новую LinearOperator, чья матричная структура квадратная, и каждый оператор расположен на или ниже главной диагонали, а в остальных местах - нули. Каждый элемент внешнего списка — это список LinearOperators соответствующий разбиению строк блочной структуры. Количество LinearOperator в разбиении строки i должно быть равно i.

Например, блочно-нижнетриугольный оператор 3 x 3 LinearOperatorBlockLowerTriangular инициализируется списком [[op_00], [op_10, op_11], [op_20, op_21, op_22]], где op_ij, i < 3, j <= i, представляют собой экземпляры LinearOperator. Этот оператор ведет себя как следующая блочно-нижнетриугольная матрица, где 0 представляет собой матрицы нулей соответствующего размера [пакет]:

[[op_00,     0,     0],
 [op_10, op_11,     0],
 [op_20, op_21, op_22]]

Каждый op_jj на главной диагонали должен представлять квадратную матрицу и, следовательно, иметь размер batch_shape_j + [M_j, M_j]. LinearOperator в строке j блочной структуры должны иметь размер range_dimension, равный размеру op_jj, и LinearOperators в столбце j должен иметь размер domain_dimension, равный размеру op_jj.

Если каждый op_jj на главной диагонали имеет размер batch_shape_j + [M_j, M_j], то объединённый оператор имеет размер broadcast_batch_shape + [sum M_j, sum M_j], где broadcast_batch_shape — это взаимное расширение batch_shape_j, j = 0, 1, ..., J, предполагая, что промежуточные размеры пакетов согласуются. Даже если объединённый размер хорошо определён, методы объединённого оператора могут потерпеть неудачу из-за отсутствия возможности трансляции в методах определяющих операторов.

Например, чтобы создать линейный оператор 4x4, объединённый из трех 2x2 операторов:

>>> operator_0 = tf.linalg.LinearOperatorFullMatrix([[1., 2.], [3., 4.]])
>>> operator_1 = tf.linalg.LinearOperatorFullMatrix([[1., 0.], [0., 1.]])
>>> operator_2 = tf.linalg.LinearOperatorLowerTriangular([[5., 6.], [7., 8]])
>>> operator = LinearOperatorBlockLowerTriangular(
...   [[operator_0], [operator_1, operator_2]])
operator.to_dense()
<tf.Tensor: shape=(4, 4), dtype=float32, numpy=
array([[1., 2., 0., 0.],
       [3., 4., 0., 0.],
       [1., 0., 5., 0.],
       [0., 1., 7., 8.]], dtype=float32)>
operator.shape
TensorShape([4, 4])
operator.log_abs_determinant()
<tf.Tensor: shape=(), dtype=float32, numpy=4.3820267>
x0 = [[1., 6.], [-3., 4.]]
x1 = [[0., 2.], [4., 0.]]
x = tf.concat([x0, x1], 0)  # Shape [2, 4] Tensor
operator.matmul(x)
<tf.Tensor: shape=(4, 2), dtype=float32, numpy=
array([[-5., 14.],
       [-9., 34.],
       [ 1., 16.],
       [29., 18.]], dtype=float32)>

Вышеупомянутый matmul эквивалентен:

>>> tf.concat([operator_0.matmul(x0),
...   operator_1.matmul(x0) + operator_2.matmul(x1)], axis=0)
<tf.Tensor: shape=(4, 2), dtype=float32, numpy=
array([[-5., 14.],
       [-9., 34.],
       [ 1., 16.],
       [29., 18.]], dtype=float32)>

Совместимость размеров

Этот оператор действует на [пакет] матрицу с совместимым размером. x является матрицей пакетов с совместимым размером для matmul и solve если

operator.shape = [B1,...,Bb] + [M, N],  with b >= 0
x.shape =        [B1,...,Bb] + [N, R],  with R >= 0.

Например:

Создать [2, 3] пакет из 4x4 линейных операторов:

>>> matrix_44 = tf.random.normal(shape=[2, 3, 4, 4])
>>> operator_44 = tf.linalg.LinearOperatorFullMatrix(matrix_44)

Создать [1, 3] пакет из 5x4 линейных операторов:

>>> matrix_54 = tf.random.normal(shape=[1, 3, 5, 4])
>>> operator_54 = tf.linalg.LinearOperatorFullMatrix(matrix_54)

Создать [1, 3] пакет из 5x5 линейных операторов:

>>> matrix_55 = tf.random.normal(shape=[1, 3, 5, 5])
>>> operator_55 = tf.linalg.LinearOperatorFullMatrix(matrix_55)

Объединить, чтобы создать [2, 3] пакет из 9x9 операторов:

>>> operator_99 = LinearOperatorBlockLowerTriangular(
...   [[operator_44], [operator_54, operator_55]])
>>> operator_99.shape
TensorShape([2, 3, 9, 9])

Создать пакет векторов размером [2, 1, 9] и применить к нему оператор.

>>> x = tf.random.normal(shape=[2, 1, 9])
>>> y = operator_99.matvec(x)
>>> y.shape
TensorShape([2, 3, 9])

Создать блочный список векторов и применить к нему оператор. Возвращается блочный список.

>>> x4 = tf.random.normal(shape=[2, 1, 4])
>>> x5 = tf.random.normal(shape=[2, 3, 5])
>>> y_blockwise = operator_99.matvec([x4, x5])
>>> y_blockwise[0].shape
TensorShape([2, 3, 4])
>>> y_blockwise[1].shape
TensorShape([2, 3, 5])

Производительность

Предположим, operator представляет собой LinearOperatorBlockLowerTriangular, состоящий из D разбиений по строкам и D разбиений по столбцам, так что общее количество операторов равно N = D * (D + 1) // 2.

  • operator.matmul имеет сложность, равную сумме сложностей индивидуальных операторов.
  • operator.solve имеет сложность, равную сумме сложностей операторов на главной диагонали и сложностей операторов вне главной диагонали.
  • operator.determinant имеет сложность, равную сумме сложностей операторов на главной диагонали.

Свойства матрицы

Этот LinearOperator инициализируется логическими флагами вида is_X, для X = non_singular, self_adjoint, positive_definite, square. Они имеют следующее значение:

  • Если is_X == True, вызывающие стороны должны ожидать, что оператор имеет свойство X. Это обещание, которое должно быть выполнено, но это не утверждение во время выполнения. Например, конечная точность с плавающей точкой может привести к нарушению этих обещаний.
  • Если is_X == False, вызывающие стороны должны ожидать, что у оператора нет X.
  • Если is_X == None (по умолчанию), у вызывающих сторон не должно быть ожиданий ни по одному из направлений.
Аргументы
operators Список списков объектов линейных операторов, каждый с одинаковым dtype. Каждый элемент operators соответствует разбиению строк сверху вниз. Операторы в каждом разбиении строк заполняются слева направо. Например, operators = [[op_0], [op_1, op_2], [op_3, op_4, op_5]] создает LinearOperatorBlockLowerTriangular с полной блочной структурой [[op_0, 0, 0], [op_1, op_2, 0], [op_3, op_4, op_5]]. Количество операторов в i-й строке должно быть равно i, так, чтобы каждый оператор располагался на или ниже главной диагонали блочной структуры. LinearOperator на главной диагонали (последние элементы каждой строки) должны быть квадратными. Другие LinearOperator должны иметь размер области определения, равный размеру области определения LinearOperator в том же разбиении по столбцам, и размер области значений, равный размеру области значений LinearOperator в том же разбиении по строкам.
is_non_singular Ожидать, что этот оператор невырожден.
is_self_adjoint Ожидать, что этот оператор равен своему эрмитовому транспонированию.
is_positive_definite Ожидать, что этот оператор положительно определён, что означает, что квадратичная форма x^H A x имеет положительную действительную часть для всех ненулевых x. Обратите внимание, что мы не требуем, чтобы оператор был самосопряжённым, чтобы быть положительно определённым. См.: https://en.wikipedia.org/wiki/Positive-definite_matrix#Extension_for_non-symmetric_matrices
is_square Ожидать, что этот оператор действует как квадратные [пакетные] матрицы. Это вызовет ValueError если установлено значение False.
name Имя для этого LinearOperator.
Возбуждения
TypeError Если все операторы не имеют одинаковый dtype.
ValueError Если operators пуст, содержит ошибочное количество элементов или содержит операторы с несовместимыми размерами.
Атрибуты
H Возвращает сопряжённый оператор к текущему LinearOperator.

Дан A представляет этот LinearOperator, вернуть A*. Обратите внимание, что вызовы self.adjoint() и self.H эквивалентны.

batch_shape Размерность пакетных измерений данного LinearOperator.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает TensorShape([B1,...,Bb]), эквивалентно A.shape[:-2]

domain_dimension Размерность (в смысле векторных пространств) области определения этого оператора.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает N.

dtype Размерность DType пакетов, обрабатываемых данным LinearOperator.
graph_parents Список зависимостей графа этого LinearOperator. (устаревшее)
Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: Не вызывайте graph_parents.
is_non_singular
is_positive_definite
is_self_adjoint
is_square Возвращает True/False в зависимости от того, является ли оператор квадратным.
operators
parameters Словарь параметров, используемых для создания этого LinearOperator.
range_dimension Размерность (в смысле векторных пространств) области значений этого оператора.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает M.

shape Размерность данного LinearOperator.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает TensorShape([B1,...,Bb, M, N]), эквивалентно A.shape.

tensor_rank Ранг (в смысле тензоров) матрицы, соответствующей данному оператору.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает b + 2.

Методы

add_to_tensor

Просмотреть исходный код

add_to_tensor(
    x, name='add_to_tensor'
)

Добавить матрицу, представленную этим оператором, к x. Эквивалентно A + x.

Аргументы
x Tensor со тем же dtype и размером, транслируемым в self.shape.
name Имя, которое нужно присвоить этому Op.
Возвращаемое значение
A Tensor с формой широковещательной передачи и такими же dtype как у self.

data-text="adjoint" id="adjoint">adjoint

Просмотреть исходный код

adjoint(
    name='adjoint'
)

Возвращает сопряжённое значение текущего LinearOperator.

Учитывая A , представляющее этот LinearOperator, вернуть A*. Обратите внимание, что вызов self.adjoint() и self.H эквивалентны.

Аргументы
name Имя для этого Op .
Возвращаемое значение
LinearOperator , представляющий сопряжённое значение этого LinearOperator .

data-text="assert_non_singular" id="assert_non_singular">assert_non_singular

Просмотреть исходный код

assert_non_singular(
    name='assert_non_singular'
)

Возвращает Op , который утверждает, что этот оператор не является вырожденным.

Этот оператор считается невырожденным, если

ConditionNumber < max{100, range_dimension, domain_dimension} * eps,
eps := np.finfo(self.dtype.as_numpy_dtype).eps
Аргументы
name Строка имени, которая должна быть добавлена к созданным операциям.
Возвращаемое значение
Assert Op, который, при запуске, поднимет InvalidArgumentError , если оператор вырожден.

data-text="assert_positive_definite" id="assert_positive_definite">assert_positive_definite

Просмотреть исходный код

assert_positive_definite(
    name='assert_positive_definite'
)

Возвращает Op , который утверждает, что этот оператор положительно определён.

Здесь положительно определённый означает, что квадратичная форма x^H A x имеет положительную действительную часть для всех ненулевых x. Обратите внимание, что для того, чтобы оператор был положительно определённым, не требуется, чтобы он был самосопряжённым.

Аргументы
name Имя для этого Op .
Возвращаемое значение
Assert Op, который, при запуске, поднимет InvalidArgumentError , если оператор не является положительно определённым.

data-text="assert_self_adjoint" id="assert_self_adjoint">assert_self_adjoint

Просмотреть исходный код

assert_self_adjoint(
    name='assert_self_adjoint'
)

Возвращает Op , который утверждает, что этот оператор является самосопряжённым.

Здесь мы проверяем, что этот оператор точно равен своему эрмитовому транспонированию.

Аргументы
name Строка имени, которая должна быть добавлена к созданным операциям.
Возвращаемое значение
Assert Op, который, при запуске, поднимет InvalidArgumentError , если оператор не является самосопряжённым.

data-text="batch_shape_tensor" id="batch_shape_tensor">batch_shape_tensor

Просмотреть исходный код

batch_shape_tensor(
    name='batch_shape_tensor'
)

Форма пакетных измерений этого оператора, определяемая во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает Tensor , содержащий [B1,...,Bb].

Аргументы
name Имя для этого Op .
Возвращаемое значение
int32 Tensor

data-text="cholesky" id="cholesky">cholesky

Просмотреть исходный код

cholesky(
    name='cholesky'
)

Возвращает фактор Холецкого как LinearOperator.

Учитывая A , представляющее этот LinearOperator, если A положительно определённое самосопряжённое, вернуть L, где A = L L^T, то есть разложение Холецкого.

Аргументы
name Имя для этого Op .
Возвращаемое значение
LinearOperator , представляющий нижнюю треугольную матрицу в разложении Холецкого.
Исключения
ValueError При LinearOperator не предполагается быть положительно определённым и самосопряжённым.

data-text="cond" id="cond">cond

Просмотреть исходный код

cond(
    name='cond'
)

Возвращает число обусловленности этого линейного оператора.

Аргументы
name Имя для этого Op .
Возвращаемое значение
Форма [B1,...,Bb] Tensor с теми же dtype , что и у self .

data-text="determinant" id="determinant">determinant

Просмотреть исходный код

determinant(
    name='det'
)

Определитель для каждого участника пакета.

Аргументы
name Имя для этого Op .
Возвращаемое значение
Tensor с формой self.batch_shape и теми же dtype , что и у self .
Исключения
NotImplementedError Если self.is_square является False .

data-text="diag_part" id="diag_part">diag_part

Просмотреть исходный код

diag_part(
    name='diag_part'
)

Эффективно получить [пакетную] диагональную часть этого оператора.

Если этот оператор имеет форму [B1,...,Bb, M, N], это возвращает Tensor diagonal, с формой [B1,...,Bb, min(M, N)], где diagonal[b1,...,bb, i] = self.to_dense()[b1,...,bb, i, i].

my_operator = LinearOperatorDiag([1., 2.])

# Efficiently get the diagonal
my_operator.diag_part()
==> [1., 2.]

# Equivalent, but inefficient method
tf.linalg.diag_part(my_operator.to_dense())
==> [1., 2.]
Аргументы
name Имя для этого Op .
Возвращаемое значение
diag_part A Tensor с такими же dtype как self.

data-text="domain_dimension_tensor" id="domain_dimension_tensor">domain_dimension_tensor

Просмотреть исходный код

domain_dimension_tensor(
    name='domain_dimension_tensor'
)

Размерность (в смысле векторных пространств) области действия этого оператора.

Определяется во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает N.

Аргументы
name Имя для этого Op .
Возвращаемое значение
int32 Tensor

data-text="eigvals" id="eigvals">eigvals

Просмотреть исходный код

eigvals(
    name='eigvals'
)

Возвращает собственные значения этого линейного оператора.

Если оператор помечен как самосопряжённый (через is_self_adjoint ), это вычисление может быть более эффективным.

Примечание: В настоящее время это поддерживает только самосопряжённые операторы.
Аргументы
name Имя для этого Op .
Возвращаемые значения
Форма [B1,...,Bb, N] Tensor той же dtype что и self.

inverse

Просмотреть исходный код

inverse(
    name='inverse'
)

Возвращает обратную величину для этого LinearOperator.

Учитывая A , представляющий этот LinearOperator, вернуть LinearOperator , представляющий A^-1.

Аргументы
name Область именования операций, используемая этим методом.
Возвращаемые значения
LinearOperator , представляющий обратную матрицу.
Исключения
ValueError При отсутствии намека на то, что LinearOperator является non_singular.

log_abs_determinant

Просмотреть исходный код

log_abs_determinant(
    name='log_abs_det'
)

Логарифм абсолютного значения определителя для каждого члена пакета.

Аргументы
name Имя для этого Op.
Возвращаемые значения
Tensor с формой self.batch_shape и той же dtype , что и self.
Исключения
NotImplementedError Если self.is_square является False.

matmul

Просмотреть исходный код

matmul(
    x, adjoint=False, adjoint_arg=False, name='matmul'
)

Преобразование [пакетной] матрицы x с левым умножением: x --> Ax.

# Make an operator acting like batch matrix A.  Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]

X = ... # shape [..., N, R], batch matrix, R > 0.

Y = operator.matmul(X)
Y.shape
==> [..., M, R]

Y[..., :, r] = sum_j A[..., :, j] X[j, r]
Аргументы
x LinearOperator, Tensor с совместимой формой и той же dtype , что и self, или итерируемый блок вида LinearOperator или Tensor. См. строку документа класса для определения совместимости форм.
adjoint Python bool. Если True, левое умножение на сопряжённую: A^H x.
adjoint_arg Python bool. Если True, вычислить A x^H, где x^H - это эрмитово транспонирование (транспонирование и комплексное сопряжение).
name Имя для этого Op.
Возвращаемые значения
LinearOperator или Tensor с формой [..., M, R] и той же dtype , что и self, или если x является блочным, список Tensor с формами, которые конкатенируются в [..., M, R].

matvec

Просмотреть исходный код

matvec(
    x, adjoint=False, name='matvec'
)

Преобразование [пакетного] вектора x с левым умножением: x --> Ax.

# Make an operator acting like batch matrix A.  Assume A.shape = [..., M, N]
operator = LinearOperator(...)

X = ... # shape [..., N], batch vector

Y = operator.matvec(X)
Y.shape
==> [..., M]

Y[..., :] = sum_j A[..., :, j] X[..., j]
Аргументы
x Tensor с совместимой формой и той же dtype , что и self, или итерируемый набор Tensor . Tensor обрабатываются как [пакетные] векторы, что означает, что для каждого набора ведущих измерений последнее измерение определяет вектор. См. строку документа класса для определения совместимости.
adjoint Python bool. Если True, левое умножение на сопряжённую: A^H x.
name Имя для этого Op.
Возвращаемые значения
Tensor с формой [..., M] и той же dtype , что и self.

range_dimension_tensor

Просмотреть исходный код

range_dimension_tensor(
    name='range_dimension_tensor'
)

Размерность (в смысле векторных пространств) области значений этого оператора.

Определяется во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает M.

Аргументы
name Имя для этого Op.
Возвращаемые значения
int32 Tensor

shape_tensor

Просмотреть исходный код

shape_tensor(
    name='shape_tensor'
)

Форма этого LinearOperator, определённая во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], тогда это возвращает Tensor , содержащую [B1,...,Bb, M, N], эквивалентную tf.shape(A).

Аргументы
name Имя для этого Op.
Возвращаемые значения
int32 Tensor

solve

Просмотреть исходный код

solve(
    rhs, adjoint=False, adjoint_arg=False, name='solve'
)

Решить (точно или приближённо) R (пакет) систем уравнений: A X = rhs.

Возвращаемое Tensor будет близко к точному решению, если A хорошо обусловлено. В противном случае близость будет варьироваться. См. строку документа класса для получения подробностей.

Дана блочная n + 1-на-n + 1 линейная оператор:

op = [[A_00 0 ... 0 ... 0], [A_10 A_11 ... 0 ... 0], ... [A_k0 A_k1 ... A_kk ... 0], ... [A_n0 A_n1 ... A_nk ... A_nn]]

мы ищем x = op.solve(y) заметив, что

y_k = A_k0.matmul(x_0) + A_k1.matmul(x_1) + ... + A_kk.matmul(x_k)

и поэтому

x_k = A_kk.solve(y_k - A_k0.matmul(x_0) - ... - A_k(k-1).matmul(x_(k-1)))

где x_k и y_k являются k блоками, полученными путём разложения x и y вдоль соответствующих осей.

Сначала мы решаем x_0 = A_00.solve(y_0). Индуктивно решаем x_k, k = 1..n, при условии x_0..x_(k-1).

Аналогично решается случай сопряжения, начиная с x_n = A_nn.solve(y_n, adjoint=True) и двигаясь назад.

Примеры:

# Make an operator acting like batch matrix A.  Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]

# Solve R > 0 linear systems for every member of the batch.
RHS = ... # shape [..., M, R]

X = operator.solve(RHS)
# X[..., :, r] is the solution to the r'th linear system
# sum_j A[..., :, j] X[..., j, r] = RHS[..., :, r]

operator.matmul(X)
==> RHS
Аргументы
rhs Tensor с той же dtype , что и у этого оператора, и совместимой формой, или список Tensor . Tensor обрабатываются как [пакетные] матрицы, то есть для каждого набора ведущих измерений последние два измерения определяют матрицу. См. строку документа класса для определения совместимости.
adjoint Python bool. Если True, решить систему, связанную с сопряжённым этим LinearOperator : A^H X = rhs.
adjoint_arg Python bool. Если True, решить A X = rhs^H , где rhs^H - это эрмитово транспонирование (транспонирование и комплексное сопряжение).
name Область именования операций, используемая этим методом.
Возвращаемые значения
Tensor с формой [...,N, R] и той же dtype , что и rhs.
Исключения
NotImplementedError Если self.is_non_singular или is_square ложно.

solvevec

Просмотреть исходный код

solvevec(
    rhs, adjoint=False, name='solve'
)

Решить единственное уравнение с максимальной эффективностью: A X = rhs.

Возвращаемое значение Tensor будет близко к точному решению, если A хорошо обусловлено. В противном случае близость будет меняться. Подробности см. в документации класса.

Примеры:

# Make an operator acting like batch matrix A.  Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]

# Solve one linear system for every member of the batch.
RHS = ... # shape [..., M]

X = operator.solvevec(RHS)
# X is the solution to the linear system
# sum_j A[..., :, j] X[..., j] = RHS[..., :]

operator.matvec(X)
==> RHS
Аргументы
rhs Tensor с теми же dtype , что и у этого оператора, или список Tensor (для блочных операторов). Tensor обрабатываются как [пакетные] векторы, что означает, что для каждой группы ведущих измерений последнее измерение определяет вектор. Определение совместимости относительно пакетных измерений см. в документации класса.
adjoint Python bool. Если True, решите систему, вовлекая сопряжённый вид этого LinearOperator: A^H X = rhs.
name Имя области имён для операций, добавленных этим методом.
Возвращаемое значение
Tensor с формой [...,N] и теми же dtype , что и у rhs.
Исключения
NotImplementedError Если self.is_non_singular или is_square равно False.

tensor_rank_tensor

Просмотреть исходный код

tensor_rank_tensor(
    name='tensor_rank_tensor'
)

Ранг (в смысле тензоров) матрицы, соответствующей этому оператору.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то возвращается b + 2.

Аргументы
name Имя для этого Op.
Возвращаемое значение
int32 Tensor, определяемое во время выполнения.

to_dense

Просмотреть исходный код

to_dense(
    name='to_dense'
)

Возвращает плотный (пакетный) матричный вид, представляющий этот оператор.

trace

Просмотреть исходный код

trace(
    name='trace'
)

След линейного оператора, равный сумме self.diag_part().

Если оператор квадратный, это также сумма собственных значений.

Аргументы
name Имя для этого Op.
Возвращаемое значение
Форма [B1,...,Bb] Tensor с теми же dtype , что и у self.

__matmul__

Просмотреть исходный код

__matmul__(
    other
)

© 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.4/api_docs/python/tf/linalg/LinearOperatorBlockLowerTriangular

Spec-Zone.ru

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