# 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
Ожидается, что этот оператор равен своему эрмитовому транспонированию.
is_positive_definite
Ожидается, что этот оператор является положительно определённым, то есть квадратичная форма x^H A x имеет положительную действительную часть для всех ненулевых x. Обратите внимание, что для положительной определённости оператора не требуется, чтобы он был самосопряжённым. См.: https://en.wikipedia.org/wiki/Positive-definite_matrix#Extension_for_non-symmetric_matrices
is_square
Ожидается, что этот оператор действует как квадратные [пакетные] матрицы.
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
Количество DType обрабатываемых этим LinearOperator.
graph_parents
Список зависимостей графа этого LinearOperator. (устарело)
is_non_singular
is_positive_definite
is_self_adjoint
is_square
Возвращает True/False в зависимости от того, является ли оператор квадратным.
operator
Оператор до применения сопряжения.
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 .
Возвращаемое значение
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 хорошо обусловлено. В противном случае близость будет варьироваться. Подробности см. в строке документа класса.
Примеры:
# 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 с той же формой, что и этот оператор, и совместимой формой. rhs рассматривается как [пакетная] матрица, что означает, что для каждой группы ведущих измерений последние два измерения определяют матрицу. Определение совместимости см. в строке документа класса.
adjoint
Python bool. Если True, решить систему, включающую сопряжённый оператор: A^H X = rhs.
adjoint_arg
Python bool. Если True, решить A X = rhs^H, где rhs^H – это эрмитово транспонирование (транспонирование и комплексное сопряжение).
name
Область имён для операций, добавленных этим методом.
Возвращаемые значения
Tensor с формой [...,N, R] и той же формой, что и rhs.
Решить единственное уравнение с наилучшим результатом: 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 с той же формой, что и этот оператор. rhs рассматривается как [пакетный] вектор, что означает, что для каждой группы ведущих измерений последнее измерение определяет вектор. Определение совместимости по пакетным измерениям см. в строке документа класса.
adjoint
Python bool. Если True, решить систему, включающую сопряжённый оператор: A^H X = rhs.
name
Область имён для операций, добавленных этим методом.
Возвращаемые значения
Tensor с формой [...,N] и той же формой, что и rhs.