Этот оператор действует как масштабированная [пакетная] единичная матрица A с формой [B1,...,Bb, N, N] для некоторого b >= 0. Первые b индексы индексируют элемент пакета. Для каждого индекса пакета (i1,...,ib), A[i1,...,ib, : :] является масштабированной версией N x N единичной матрицы.
LinearOperatorIdentity инициализируется с num_rows, и multiplier (a Tensor) формы [B1,...,Bb]. N устанавливается в num_rows, а multiplier определяет масштаб для каждого элемента пакета.
# Create a 2 x 2 scaled identity matrix.
operator = LinearOperatorIdentity(num_rows=2, multiplier=3.)
operator.to_dense()
==> [[3., 0.]
[0., 3.]]
operator.shape
==> [2, 2]
operator.log_abs_determinant()
==> 2 * Log[3]
x = ... Shape [2, 4] Tensor
operator.matmul(x)
==> 3 * x
y = tf.random.normal(shape=[3, 2, 4])
# Note that y.shape is compatible with operator.shape because operator.shape
# is broadcast to [3, 2, 2].
x = operator.solve(y)
==> 3 * x
# Create a 2-batch of 2x2 identity matrices
operator = LinearOperatorIdentity(num_rows=2, multiplier=5.)
operator.to_dense()
==> [[[5., 0.]
[0., 5.]],
[[5., 0.]
[0., 5.]]]
x = ... Shape [2, 2, 3]
operator.matmul(x)
==> 5 * x
# Here the operator and x have different batch_shape, and are broadcast.
x = ... Shape [1, 2, 3]
operator.matmul(x)
==> 5 * x
Совместимость форм
Этот оператор действует на [пакетную] матрицу с совместимой формой. x является пакетной матрицей с совместимой формой для matmul и solve если
operator.shape = [B1,...,Bb] + [N, N], with b >= 0
x.shape = [C1,...,Cc] + [N, R],
and [C1,...,Cc] broadcasts with [B1,...,Bb] to [D1,...,Dd]
Производительность
operator.matmul(x) является O(D1*...*Dd*N*R)
operator.solve(x) является O(D1*...*Dd*N*R)
operator.determinant() является O(D1*...*Dd)
Подсказки свойств матрицы
Этот LinearOperator инициализируется булевыми флагами формы is_X, для X = non_singular, self_adjoint, positive_definite, square. Они имеют следующее значение
Если is_X == True, вызывающие стороны должны ожидать, что оператор будет иметь свойство X. Это обещание, которое должно быть выполнено, но это не утверждение во время выполнения. Например, конечная плавающая точка может привести к нарушению этих обещаний.
Если is_X == False, вызывающие стороны должны ожидать, что оператор не будет иметь X.
Если is_X == None (по умолчанию), вызывающие стороны не должны ожидать ни того, ни другого.
Аргументы
num_rows
Скалярное неотрицательное целое число Tensor. Количество строк в соответствующей единичной матрице.
multiplier
Tensor формы [B1,...,Bb], или [] (скаляр).
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
Ожидать, что этот оператор действует как квадратные [пакетные] матрицы.
assert_proper_shapes
Python bool. Если False, выполняется только статическая проверка, что инициализация и аргументы метода имеют правильную форму. Если True, и статические проверки не дают результатов, добавляются утверждения в граф.
name
Имя для этого LinearOperator
Возбуждает
ValueError
Если num_rows статически определяется как нескалярное или отрицательное.
Атрибуты
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
Размерность Tensor обрабатываемых этим LinearOperator.
graph_parents
Список зависимостей графа этого LinearOperator. (устаревшее)
is_non_singular
is_positive_definite
is_self_adjoint
is_square
Возвращает True/False в зависимости от того, является ли этот оператор квадратным.
multiplier
[Пакетный] скаляр Tensor, c в cI.
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
Tensor или LinearOperator с совместимой формой и тем же 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.
Возвращаемое значение
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.
Исключения
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 рассматривается как [пакетный] вектор, что означает, что для каждой группы ведущих измерений последнее измерение определяет вектор. См. строку документации класса для совместимости по пакетным измерениям.
adjoint
Python bool. Если True, решить систему, вовлекая сопряжённый к этому LinearOperator: A^H X = rhs.
name
Область имён для использования для операций, добавленных этим методом.
Возвращаемое значение
Tensor с формой [...,N] и той же dtype что и rhs.
Исключения
NotImplementedError
Если self.is_non_singular или is_square равно False.