Spec-Zone.ru › TensorFlow 2.4

tf.linalg.LinearOperatorPermutation

LinearOperator действуя как [пакет] матриц перестановки.

Наследуется от: LinearOperator, Module

Просмотр псевдонимов

Псевдонимы совместимости для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.linalg.LinearOperatorPermutation

tf.linalg.LinearOperatorPermutation(
    perm, dtype=tf.dtypes.float32, is_non_singular=None, is_self_adjoint=None,
    is_positive_definite=None, is_square=None,
    name='LinearOperatorPermutation'
)

Этот оператор действует как [пакет] перестановок с формой [B1,...,Bb, N, N] для некоторого b >= 0. Первые b индексы индексируют участника пакета. Для каждого индекса пакета (i1,...,ib), A[i1,...,ib, : :] является матрицей N x N. Эта матрица A не материализуется, но для целей вещания эта форма будет актуальна.

LinearOperatorPermutation инициализируется (пакетным) вектором.

Перестановка определяется целочисленным вектором v, значения которого уникальны и находятся в диапазоне [0, ... n]. Применение перестановки к входной матрице означает следующее: значение v в индексе i означает перемещение v[i]-й строки входной матрицы в i-ю строку. Поскольку все значения уникальны, это приведет к перестановке строк входной матрицы. Обратите внимание, что вектор перестановки v имеет те же семантические значения, что и tf.transpose.

# Create a 3 x 3 permutation matrix that swaps the last two columns.
vec = [0, 2, 1]
operator = LinearOperatorPermutation(vec)

operator.to_dense()
==> [[1., 0., 0.]
     [0., 0., 1.]
     [0., 1., 0.]]

operator.shape
==> [3, 3]

# This will be zero.
operator.log_abs_determinant()
==> scalar Tensor

x = ... Shape [3, 4] Tensor
operator.matmul(x)
==> Shape [3, 4] Tensor

Совместимость форм

Этот оператор действует на [пакет] матриц с совместимой формой. 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]

Подсказки свойств матрицы

Этот LinearOperator инициализируется булевыми флагами вида is_X, для X = non_singular, self_adjoint, positive_definite, square. У них есть следующее значение:

  • Если is_X == True, вызывающие стороны должны ожидать, что оператор будет обладать свойством X. Это обещание, которое должно быть выполнено, но это не проверка во время выполнения. Например, конечная точность с плавающей запятой может привести к нарушению этих обещаний.
  • Если is_X == False, вызывающие стороны должны ожидать, что оператор не будет обладать X.
  • Если is_X == None (по умолчанию), вызывающие стороны не должны иметь ожиданий ни в ту, ни в другую сторону.
Args
perm Форма [B1,...,Bb, N] Целое число Tensor с b >= 0 N >= 0. Вектор целых чисел, представляющий перестановку для применения. Обратите внимание, что этот аргумент такой же, как tf.transpose. Однако эта перестановка применяется к строкам, в то время как перестановка в tf.transpose применяется к размерностям Tensor. perm должен иметь уникальные записи из {0, 1, ... N-1}.
dtype Тип dtype аргументов этого оператора. По умолчанию: float32. Разрешенные типы данных: float16, float32, float64, complex64, complex128.
is_non_singular Ожидается, что этот оператор не является вырожденным.
is_self_adjoint Ожидается, что этот оператор равен своему эрмитовому транспонированию. Это автоматически устанавливается в значение true.
is_positive_definite Ожидается, что этот оператор является положительно определенным, т.е. квадратичная форма x^H A x имеет положительную действительную часть для всех ненулевых x. Обратите внимание, что для положительной определенности мы не требуем, чтобы оператор был самосопряженным. См.: https://en.wikipedia.org/wiki/Positive-definite_matrix#Extension_for_non-symmetric_matrices Это автоматически устанавливается в значение false.
is_square Ожидается, что этот оператор действует как квадратные [пакетные] матрицы. Это автоматически устанавливается в значение true.
name Имя этого LinearOperator.
Raises
ValueError is_self_adjoint не True, is_positive_definite не False или is_square не True.
Attributes
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 Размерность Tensors, обрабатываемых этим LinearOperator.
graph_parents Список зависимостей графа этого LinearOperator. (устарело)
Предупреждение: ЭТА ФУНКЦИЯ УСТАРЕЛА. Она будет удалена в будущей версии. Инструкции по обновлению: не вызывайте graph_parents.
is_non_singular
is_positive_definite
is_self_adjoint
is_square Возвращает True/False в зависимости от того, является ли этот оператор квадратным.
parameters Словарь параметров, используемых для создания этого LinearOperator.
perm
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.

Методы

add_to_tensor

Просмотреть исходный код

add_to_tensor(
    x, name='add_to_tensor'
)

Добавить матрицу, представленную этим оператором, к x. Эквивалентно A + x.

Args
x Tensor с той же dtype и формой, совместимой с вещанием для self.shape.
name Имя, которое нужно дать этому Op.
Returns
Tensor с формой вещания и тем же типом dtype что у self.

adjoint

Просмотреть исходный код

adjoint(
    name='adjoint'
)

Возвращает сопряженный оператор текущего LinearOperator.

Учитывая A, представляющее этот LinearOperator, верните A*. Обратите внимание, что вызов self.adjoint() и self.H эквивалентны.

Args
name Имя для этого Op.
Returns
LinearOperator, представляющий сопряженный оператор этого LinearOperator.

assert_non_singular

Просмотреть исходный код

assert_non_singular(
    name='assert_non_singular'
)

Возвращает утверждение, что этот оператор не вырожден.

Этот оператор считается невырожденным, если

ConditionNumber < max{100, range_dimension, domain_dimension} * eps,
eps := np.finfo(self.dtype.as_numpy_dtype).eps
Args
name Имя строки для добавления к созданным операциям.
Returns
Утверждение Op, которое при выполнении поднимет исключение InvalidArgumentError если оператор вырожден.

assert_positive_definite

Просмотреть исходный код

assert_positive_definite(
    name='assert_positive_definite'
)

Возвращает утверждение, что этот оператор является положительно определенным.

Здесь положительно определенное означает, что квадратичная форма x^H A x имеет положительную вещественную часть для всех ненулевых x. Обратите внимание, что для того, чтобы оператор был положительно определенным, нам не требуется, чтобы он был самосопряжённым.

Аргументы
name Имя для данного Op.
Возвращает
An Assert Op, который при выполнении поднимет InvalidArgumentError если оператор не является положительно определённым.

assert_self_adjoint

Просмотреть исходный код

assert_self_adjoint(
    name='assert_self_adjoint'
)

Возвращает Op, который утверждает, что данный оператор является самосопряжённым.

Здесь мы проверяем, что данный оператор точно равен своему эрмитовому транспонированию.

Аргументы
name Строковое имя для добавления к созданным операциям.
Возвращает
An Assert Op, который при выполнении поднимет InvalidArgumentError если оператор не является самосопряжённым.

batch_shape_tensor

Просмотреть исходный код

batch_shape_tensor(
    name='batch_shape_tensor'
)

Форма размерности пакетных измерений этого оператора, определяемая во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает Tensor, содержащий [B1,...,Bb].

Аргументы
name Имя для этого Op.
Возвращает
int32 Tensor

cholesky

Просмотреть исходный код

cholesky(
    name='cholesky'
)

Возвращает фактор Холецкого в виде LinearOperator.

Учитывая A, представляющую этот LinearOperator, если A является положительно определённой самосопряжённой, возвращает L, где A = L L^T, т.е. разложение Холецкого.

Аргументы
name Имя для этого Op.
Возвращает
LinearOperator, представляющий нижнюю треугольную матрицу в разложении Холецкого.
Исключения
ValueError При LinearOperator не подразумевает положительную определённость и самосопряжённость.

cond

Просмотреть исходный код

cond(
    name='cond'
)

Возвращает число обусловленности этого линейного оператора.

Аргументы
name Имя для этого Op.
Возвращает
Форма [B1,...,Bb] Tensor с той же dtype что и self.

determinant

Просмотреть исходный код

determinant(
    name='det'
)

Определитель для каждого члена пакета.

Аргументы
name Имя для этого Op.
Возвращает
Tensor с формой self.batch_shape и той же dtype что и self.
Исключения
NotImplementedError Если self.is_square False.

diag_part

Просмотреть исходный код

diag_part(
    name='diag_part'
)

Эффективно получить [пакетную] диагональную часть этого оператора.

Если этот оператор имеет форму [B1,...,Bb, M, N], это возвращает Tensor diagonal, формы [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.]
Аргументы
name Имя для этого Op.
Возвращает
diag_part Tensor с той же dtype что и self.

domain_dimension_tensor

Просмотреть исходный код

domain_dimension_tensor(
    name='domain_dimension_tensor'
)

Размерность (в смысле векторных пространств) области действия этого оператора.

Определяется во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то это возвращает N.

Аргументы
name Имя для этого Op.
Возвращает
int32 Tensor

eigvals

Просмотреть исходный код

eigvals(
    name='eigvals'
)

Возвращает собственные значения этого линейного оператора.

Если оператор помечен как самосопряжённый (через is_self_adjoint) это вычисление может быть более эффективным.

Примечание: В настоящее время это поддерживает только самосопряжённые операторы.
Аргументы
name Имя для этого Op.
Возвращает
Форма [B1,...,Bb, N] Tensor с той же dtype что и self.

inverse

Просмотреть исходный код

inverse(
    name='inverse'
)

Возвращает обратную величину этого LinearOperator.

Учитывая A, представляющую этот LinearOperator, возвращает LinearOperator представляющее A^-1.

Аргументы
name Область именования операций, используемая этим методом.
Возвращает
LinearOperator представляющий обратную величину этой матрицы.
Исключения
ValueError При LinearOperator не подразумевает non_singular.

log_abs_determinant

Просмотреть исходный код

log_abs_determinant(
    name='log_abs_det'
)

Логарифм абсолютного значения определителя для каждого члена пакета.

Аргументы
name Имя для этого Op.
Возвращает
Tensor с формой self.batch_shape и той же dtype что и self.
Исключения
NotImplementedError Если self.is_square False.

matmul

Просмотр исходного кода

matmul(
    x, adjoint=False, adjoint_arg=False, name='matmul'
)

Преобразование [пакетной] матрицы 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.

matvec

Просмотр исходного кода

matvec(
    x, adjoint=False, name='matvec'
)

Преобразование [пакетного] вектора 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 Питоновский bool. Если True, выполнить левое умножение на сопряжённое: A^H x.
name Имя для этого Op.
Возвращаемое значение
Tensor с формой [..., M] и тем же dtype , что и self.

range_dimension_tensor

Просмотр исходного кода

range_dimension_tensor(
    name='range_dimension_tensor'
)

Размерность (в смысле векторных пространств) области значений этого оператора.

Определяется во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то возвращает M.

Аргументы
name Имя для этого Op.
Возвращаемое значение
int32 Tensor

shape_tensor

Просмотр исходного кода

shape_tensor(
    name='shape_tensor'
)

Форма этого LinearOperator, определенная во время выполнения.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то возвращает Tensor , содержащую [B1,...,Bb, M, N], эквивалентную tf.shape(A).

Аргументы
name Имя для этого Op.
Возвращаемое значение
int32 Tensor

solve

Просмотр исходного кода

solve(
    rhs, adjoint=False, adjoint_arg=False, name='solve'
)

Решение (точное или приближённое) 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 Питоновский bool. Если True, решить систему, включающую сопряжённый к этому LinearOperator: A^H X = rhs.
adjoint_arg Питоновский bool. Если True, решить A X = rhs^H , где rhs^H — эрмитово сопряжённая матрица (транспонированная и комплексно сопряжённая).
name Наименование области для добавления операций в этом методе.
Возвращаемое значение
Tensor с формой [...,N, R] и тем же dtype , что и rhs.
Исключения
NotImplementedError Если self.is_non_singular или is_square False.

solvevec

Просмотр исходного кода

solvevec(
    rhs, adjoint=False, name='solve'
)

Решение отдельного уравнения с лучшим результатом: 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 Питоновский bool. Если True, решить систему, включающую сопряжённый к этому LinearOperator: A^H X = rhs.
name Наименование области для добавления операций в этом методе.
Возвращаемое значение
Tensor с формой [...,N] и тем же dtype , что и rhs.
Исключения
NotImplementedError Если self.is_non_singular или is_square False.

tensor_rank_tensor

Просмотр исходного кода

tensor_rank_tensor(
    name='tensor_rank_tensor'
)

Ранг (в смысле тензоров) матрицы, соответствующей этому оператору.

Если этот оператор действует как пакетная матрица A с A.shape = [B1,...,Bb, M, N], то возвращает b + 2.

Аргументы
name Имя для этого Op.
Возвращаемое значение
int32 Tensor, определенная во время выполнения.

to_dense

Просмотр исходного кода

to_dense(
    name='to_dense'
)

Возврат плотной (пакетной) матрицы, представляющей этот оператор.

trace

Просмотр исходного кода

trace(
    name='trace'
)

След линейного оператора, равный сумме self.diag_part().

Если оператор квадратный, это также сумма собственных значений.

Аргументы
name Имя для этого Op.
Возвращаемое значение
Форма [B1,...,Bb] Tensor того же dtype , что и self.

__matmul__

Просмотреть исходный код

__matmul__(
    other
)

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/linalg/LinearOperatorPermutation

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API