Этот оператор представляет собой обратный к другому оператору.
# Create a 2 x 2 linear operator.
operator = LinearOperatorFullMatrix([[1., 0.], [0., 2.]])
operator_inv = LinearOperatorInversion(operator)
operator_inv.to_dense()
==> [[1., 0.]
[0., 0.5]]
operator_inv.shape
==> [2, 2]
operator_inv.log_abs_determinant()
==> - log(2)
x = ... Shape [2, 4] Tensor
operator_inv.matmul(x)
==> Shape [2, 4] Tensor, equal to operator.solve(x)
Производительность
Производительность LinearOperatorInversion зависит от производительности базовых операторов: solve и matmul меняются местами, а определитель инвертируется.
Указания по свойствам матрицы
Этот LinearOperator инициализируется булевыми флагами типа is_X, для X = non_singular, self_adjoint, positive_definite, square. Они имеют следующее значение:
Если is_X == True, вызывающие стороны должны ожидать, что оператор обладает свойством X. Это обещание, которое должно быть выполнено, но это не утверждение во время выполнения. Например, конечная точность с плавающей запятой может привести к нарушению этих обещаний.
Если is_X == False, вызывающие стороны должны ожидать, что оператор не обладает X.
Если is_X == None (по умолчанию), вызывающие стороны не должны иметь ожиданий.
Аргументы
operator
LinearOperator объект. Если operator.is_non_singular == False, возникает исключение. Мы допускаем operator.is_non_singular == None, в этом случае у этого оператора будет is_non_singular == None. Аналогично для is_self_adjoint и is_positive_definite.
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 + "_inv".
Учитывая 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
DTypeTensor обрабатываемых этим 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
TensorShape этого 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.
Преобразовать [batch] вектор 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 обрабатывается как [batch] вектор, означающий, что для каждого набора ведущих измерений последнее измерение определяет вектор. См. строку документации класса для определения совместимости.
adjoint
Python bool. Если True, умножить слева на сопряжённое: A^H x.
name
Имя для этого Op.
Возвращаемое значение
Объект Tensor с формой [..., M] и теми же dtype что и у self.
Форма этого LinearOperator, определяется во время выполнения.
Если этот оператор действует как матрица batch A с A.shape = [B1,...,Bb, M, N], то это возвращает Tensor содержащий [B1,...,Bb, M, N], эквивалентное tf.shape(A).
Решить (точно или приближённо) 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 что у этого оператора и совместимой формой. rhs обрабатывается как [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.
Решить одно уравнение с наилучшим приближением: 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 что у этого оператора. rhs обрабатывается как [batch] вектор, означающий, что для каждого набора ведущих измерений последнее измерение определяет вектор. См. строку документации класса для определения совместимости относительно batch измерений.
adjoint
Python bool. Если True, решить систему, включающую сопряжённый оператор: A^H X = rhs.
name
Имя области вычислений для операций, добавленных этим методом.
Возвращаемое значение
Tensor с формой [...,N] и теми же dtype что и у rhs.
Исключения
NotImplementedError
Если self.is_non_singular или is_square равно False.