# 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
Ожидать, что оператор равен своему эрмитовому сопряжению.
Ожидать, что эта операция действует как квадратные [пакетные] матрицы.
name
Имя для этой LinearOperator. По умолчанию operator.name + "_inv".
Исключения
ValueError
Если operator.is_non_singular равно False.
Атрибуты
H
Возвращает сопряжённую операцию.
Учитывая 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
Размерность Tensor операций, обрабатываемых этой 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
Питоновский bool. Если True, умножить слева на сопряжённый оператор: A^H x.
adjoint_arg
Питоновский 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.
Возвращаемые значения
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 обрабатывается как [пакетная] матрица, что означает, что для каждого набора ведущих измерений последние два измерения определяют матрицу. Смотрите строку документа класса для определения совместимости.
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 рассматривается как [пакетный] вектор, что означает, что для каждого набора ведущих измерений последнее измерение определяет вектор. Смотрите строку документа класса для определения совместимости по пакетным измерениям.
adjoint
Python bool. Если True, решить систему, включающую сопряжённый с данным оператором LinearOperator: A^H X = rhs.
name
Область имён для операций, добавленных этим методом.