# Create a 2 x 2 linear operator.
operator = LinearOperatorFullMatrix([[1 - i., 3.], [0., 1. + i]])
operator_adjoint = LinearOperatorAdjoint(operator)
operator_adjoint.to_dense()
==> [[1. + i, 0.]
[3., 1 - i]]
operator_adjoint.shape
==> [2, 2]
operator_adjoint.log_abs_determinant()
==> - log(2)
x = ... Shape [2, 4] Tensor
operator_adjoint.matmul(x)
==> Shape [2, 4] Tensor, equal to operator.matmul(x, adjoint=True)
Производительность
Производительность LinearOperatorAdjoint зависит от производительности базовых операторов.
Подсказки свойств матрицы
Этот LinearOperator инициализируется булевыми флагами вида is_X, для X = non_singular, self_adjoint, positive_definite, square. Они имеют следующее значение:
Если is_X == True, вызывающие стороны должны ожидать, что оператор обладает свойством X. Это обещание, которое должно быть выполнено, но это не проверка во время выполнения. Например, конечная точность с плавающей запятой может привести к нарушению этих обещаний.
Если is_X == False, вызывающие стороны должны ожидать, что оператор не обладает X.
Если is_X == None (по умолчанию), вызывающие стороны не должны иметь ожиданий ни по одному из вариантов.
Аргументы
operator
Объект LinearOperator.
is_non_singular
Ожидать, что этот оператор не является вырожденным.
is_self_adjoint
Ожидать, что этот оператор равен своему эрмитовому транспонированию.
Ожидать, что этот оператор действует как квадратные [пакетные] матрицы.
name
Имя для этого LinearOperator. По умолчанию operator.name + "_adjoint".
Возможные исключения
ValueError
Если operator.is_non_singular равно False.
Атрибуты
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
Размерность Tensors, обрабатываемых этим LinearOperator.
graph_parents
Список зависимостей графа этого LinearOperator. (устарело)
is_non_singular
is_positive_definite
is_self_adjoint
is_square
Возвращает True/False в зависимости от того, является ли оператор квадратным.
operator
Оператор до применения сопряжения.
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.
Возвращает Op , который утверждает, что этот оператор положительно определён.
Здесь положительная определённость означает, что квадратичная форма x^H A x имеет положительную вещественную часть для всех ненулевых x. Обратите внимание, что для положительной определённости оператору не нужно быть самосопряжённым.
Аргументы
name
Имя для этой Op.
Возвращаемое значение
AssertOp, который, при выполнении, сгенерирует InvalidArgumentError , если оператор не является положительно определённым.
Учитывая A представляющее этот LinearOperator, если A является положительно определённой и самосопряжённой, возвращает L, где A = L L^T, т.е. разложение Холецкого.
Аргументы
name
Имя для этого Op.
Возвращает
LinearOperator , представляющее нижнюю треугольную матрицу в разложении Холецкого.
Возбуждает исключение
ValueError
При отсутствии подсказки о том, что LinearOperator является положительно определённой и самосопряжённой.
Эффективный способ получить [пакетную] диагональную часть этого оператора.
Если у этого оператора форма [B1,...,Bb, M, N], он возвращает Tensordiagonal, формы [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.]
Преобразование [пакетной] матрицы 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. См. документацию класса для определения совместимости.
adjoint
Python bool. Если True, умножить слева на сопряжённый оператор: A^H x.
adjoint_arg
Python bool. Если True, вычислить A x^H где x^H — это эрмитово сопряжение (транспонирование и комплексное сопряжение).
name
Имя для этого Op.
Возвращает
A LinearOperator или Tensor с формой [..., M, R] и теми же dtype что и self.
Преобразовать [пакетный] вектор 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. x обрабатывается как [пакетный] вектор, что означает, что для каждого набора ведущих измерений последнее измерение определяет вектор. См. строку документации класса для определения совместимости.
adjoint
Python bool. Если True, умножить слева на сопряжённое: A^H x.
name
Имя для данного Op.
Возвращает
A Tensor с формой [..., M] и теми же dtype что и self.
Форма данного LinearOperator, определяемая во время выполнения.
Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то он возвращает Tensor содержащий [B1,...,Bb, M, N], эквивалентный tf.shape(A).
Решить (точно или приближённо) R (пакетные) системы уравнений: A X = rhs.
Возвращённое Tensor будет близко к точному решению, если A хорошо обусловлено. В противном случае близость будет меняться. Подробнее см. строку документации класса.
data-text="Examples:" id="examples">Примеры:
# 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 что и у этого оператора и совместимой формой. rhs обрабатывается как [пакетная] матрица, означающая, что для каждого набора ведущих измерений последние два измерения определяют матрицу. См. строку документации класса для определения совместимости.
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.
Решить единственное уравнение с наилучшим результатом: A X = rhs.
Возвращённый Tensor будет близок к точному решению, если A хорошо обусловлено. В противном случае близость будет меняться. Подробнее см. строку документации класса.
data-text="Examples:" id="examples_2">Примеры:
# 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 что и у этого оператора. rhs обрабатывается как [пакетный] вектор, означающий, что для каждого набора ведущих измерений последнее измерение определяет вектор. См. строку документации класса для определения совместимости по пакетным измерениям.
adjoint
Python bool. Если True, решить систему, связанную с сопряжённым данным LinearOperator: A^H X = rhs.
name
Область именования для операций, добавленных этим методом.
Возвращает
Tensor с формой [...,N] и теми же dtype что и rhs.