Spec-Zone.ru › TensorFlow 2.9

tf.linalg.LinearOperatorBlockDiag

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

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

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

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

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

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

tf.compat.v1.linalg.LinearOperatorBlockDiag

tf.linalg.LinearOperatorBlockDiag(
    operators,
    is_non_singular=None,
    is_self_adjoint=None,
    is_positive_definite=None,
    is_square=True,
    name=None
)

Этот оператор объединяет один или несколько линейных операторов [op1,...,opJ], создавая новый LinearOperator, чья матричная репрезентация имеет каждый оператор opi на главной диагонали и нули в остальных местах.

Совместимость форм

Если opj действует как [batch] матрица Aj, тогда op_combined действует как [batch] матрица, образованная размещением каждой матрицы Aj на главной диагонали.

Каждый opj должен представлять матрицу и, следовательно, иметь форму batch_shape_j + [M_j, N_j].

Если у opj форма batch_shape_j + [M_j, N_j], то у комбинированного оператора форма broadcast_batch_shape + [sum M_j, sum N_j], где broadcast_batch_shape — взаимное расширение batch_shape_j, j = 1,...,J, предполагая, что промежуточные формы пакетных размеров совместимы.

Аргументы для matmul, matvec, solve, и solvevec могут быть либо одиночными Tensor или списками Tensors, которые интерпретируются как блоки. Элемент j в блочном списке Tensor должен иметь размеры, соответствующие opj для данного метода. Если на вход подается список блоков, то и на выходе возвращается список блоков.

Когда opj не гарантированы как квадратные, методы этого оператора могут завершиться неудачей из-за того, что комбинированный оператор не является квадратным и/или отсутствуют эффективные методы.

# Create a 4 x 4 linear operator combined of two 2 x 2 operators.
operator_1 = LinearOperatorFullMatrix([[1., 2.], [3., 4.]])
operator_2 = LinearOperatorFullMatrix([[1., 0.], [0., 1.]])
operator = LinearOperatorBlockDiag([operator_1, operator_2])

operator.to_dense()
==> [[1., 2., 0., 0.],
     [3., 4., 0., 0.],
     [0., 0., 1., 0.],
     [0., 0., 0., 1.]]

operator.shape
==> [4, 4]

operator.log_abs_determinant()
==> scalar Tensor

x1 = ... # Shape [2, 2] Tensor
x2 = ... # Shape [2, 2] Tensor
x = tf.concat([x1, x2], 0)  # Shape [2, 4] Tensor
operator.matmul(x)
==> tf.concat([operator_1.matmul(x1), operator_2.matmul(x2)])

# Create a 5 x 4 linear operator combining three blocks.
operator_1 = LinearOperatorFullMatrix([[1.], [3.]])
operator_2 = LinearOperatorFullMatrix([[1., 6.]])
operator_3 = LinearOperatorFullMatrix([[2.], [7.]])
operator = LinearOperatorBlockDiag([operator_1, operator_2, operator_3])

operator.to_dense()
==> [[1., 0., 0., 0.],
     [3., 0., 0., 0.],
     [0., 1., 6., 0.],
     [0., 0., 0., 2.]]
     [0., 0., 0., 7.]]

operator.shape
==> [5, 4]


# Create a [2, 3] batch of 4 x 4 linear operators.
matrix_44 = tf.random.normal(shape=[2, 3, 4, 4])
operator_44 = LinearOperatorFullMatrix(matrix)

# Create a [1, 3] batch of 5 x 5 linear operators.
matrix_55 = tf.random.normal(shape=[1, 3, 5, 5])
operator_55 = LinearOperatorFullMatrix(matrix_55)

# Combine to create a [2, 3] batch of 9 x 9 operators.
operator_99 = LinearOperatorBlockDiag([operator_44, operator_55])

# Create a shape [2, 3, 9] vector.
x = tf.random.normal(shape=[2, 3, 9])
operator_99.matmul(x)
==> Shape [2, 3, 9] Tensor

# Create a blockwise list of vectors.
x = [tf.random.normal(shape=[2, 3, 4]), tf.random.normal(shape=[2, 3, 5])]
operator_99.matmul(x)
==> [Shape [2, 3, 4] Tensor, Shape [2, 3, 5] Tensor]

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

Производительность LinearOperatorBlockDiag при выполнении любого действия равна сумме действий отдельных операторов.

Подсказки о свойствах матриц

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

  • Если is_X == True, вызывающие функции должны ожидать, что оператор обладает свойством X. Это обещание, которое должно быть выполнено, но это не утверждение во время выполнения. Например, конечная точность плавающей точки может привести к нарушению этих обещаний.
  • Если is_X == False, вызывающие функции должны ожидать, что оператор не обладает свойством X.
  • Если is_X == None (по умолчанию), вызывающие функции не должны иметь никаких ожиданий.
Аргументы
operators Итерируемый список объектов LinearOperator, каждый из которых имеет одинаковые dtype и совместимые формы.
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 Ожидание, что этот оператор действует как квадратные [batch] матрицы. Это истинно по умолчанию и вызовет ValueError в противном случае.
name Имя для этого LinearOperator. По умолчанию — объединённые имена отдельных операторов с _o_.
Исключения
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 Список операторов, обрабатываемых этим 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.
Возвращаемое значение
Tensor с расширенной формой и теми же dtype что и у self.

adjoint

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

adjoint(
    name='adjoint'
)

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

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

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

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 если оператор вырожден.

assert_positive_definite

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

assert_positive_definite(
    name='assert_positive_definite'
)

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

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

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

assert_self_adjoint

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

assert_self_adjoint(
    name='assert_self_adjoint'
)

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

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

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

batch_shape_tensor

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

batch_shape_tensor(
    name='batch_shape_tensor'
)

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

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

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

cholesky

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

cholesky(
    name='cholesky'
)

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

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

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

cond

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

cond(
    name='cond'
)

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

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

determinant

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

determinant(
    name='det'
)

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

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

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 Tensor того же dtype что и self.

domain_dimension_tensor

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

domain_dimension_tensor(
    name='domain_dimension_tensor'
)

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

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

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

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

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'
)

Преобразует [batch] матрицу 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'
)

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

# Make an operator acting like batch matric 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 обрабатываются как [batch] векторы, что означает, что для каждой группы ведущих измерений последнее измерение определяет вектор. См. строку документации класса для определения совместимости.
adjoint Python bool. Если True, умножает слева на сопряжённое: A^H x.
name Имя для этого Op.
Возвращает
Tensor с формой [..., M] и теми же dtype что и self.

range_dimension_tensor

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

range_dimension_tensor(
    name='range_dimension_tensor'
)

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

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

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

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

shape_tensor

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

shape_tensor(
    name='shape_tensor'
)

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

Если этот оператор действует как [batch] матрица 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 (batch) системы уравнений: 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 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 обрабатываются как [batch] матрицы, что означает, что для каждой группы ведущих измерений последние два измерения определяют матрицу. См. строку документации класса для определения совместимости.
adjoint Python bool. Если True, решает систему, включающую сопряжённый оператор: 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 равно False.

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 обрабатываются как [batch] векторы, что означает, что для каждой группы ведущих измерений последнее измерение определяет вектор. См. строку документации класса для определения совместимости относительно измерений батча.
adjoint Python bool. Если True, решает систему, включающую сопряжённый оператор: 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'
)

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

Если этот оператор действует как [batch] матрица 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
)

© 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/LinearOperatorBlockDiag

Spec-Zone.ru

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