Этот оператор представляет обратный другой оператор.
# 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
TensorShape пакетных размерностей этого 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
DTypeTensors, обрабатываемых этим 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
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.
Возвращает
A 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.
Возвращает
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 с той же формой dtype что у оператора и совместимой формой. rhs рассматривается как [batch] матрица, означающая, что для каждого набора ведущих измерений две последние размерности определяют матрицу. См. строку документации класса для определения совместимости.
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 хорошо обусловлено. В противном случае близость будет варьироваться. См. строку документации класса для получения подробностей.
Примеры:
# 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] вектор, означающий, что для каждого набора ведущих измерений последнее измерение определяет вектор. См. строку документации класса для совместимости относительно пакетных измерений.
adjoint
Python bool. Если True, решить систему, включающую сопряжённый оператор LinearOperator: A^H X = rhs.
name
Область имён для операций, добавленных этим методом.