# tf.linalg.LinearOperatorToeplitz

<br />

|---|---|
| [![](https://www.tensorflow.org/images/tf_logo_32px.png) TensorFlow 1 version](https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/linalg/LinearOperatorToeplitz) | [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator_toeplitz.py#L36-L240) |

`LinearOperator` acting like a \[batch\] of toeplitz matrices.

Inherits From: [`LinearOperator`](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/linalg/LinearOperator)

#### View aliases


**Compat aliases for migration**

See
[Migration guide](https://www.tensorflow.org/guide/migrate) for
more details.

[`tf.compat.v1.linalg.LinearOperatorToeplitz`](https://www.tensorflow.org/api_docs/python/tf/linalg/LinearOperatorToeplitz)

<br />

    tf.linalg.LinearOperatorToeplitz(
        col, row, is_non_singular=None, is_self_adjoint=None, is_positive_definite=None,
        is_square=None, name='LinearOperatorToeplitz'
    )

This operator acts like a \[batch\] Toeplitz matrix `A` with shape
`[B1,...,Bb, N, N]` for some `b >= 0`. The first `b` indices index a
batch member. For every batch index `(i1,...,ib)`, `A[i1,...,ib, : :]` is
an `N x N` matrix. This matrix `A` is not materialized, but for
purposes of broadcasting this shape will be relevant.

#### Description in terms of toeplitz matrices

Toeplitz means that `A` has constant diagonals. Hence, `A` can be generated
with two vectors. One represents the first column of the matrix, and the
other represents the first row.

Below is a 4 x 4 example:

    A = |a b c d|
        |e a b c|
        |f e a b|
        |g f e a|

#### Example of a Toeplitz operator.

    # Create a 3 x 3 Toeplitz operator.
    col = [1., 2., 3.]
    row = [1., 4., -9.]
    operator = LinearOperatorToeplitz(col, row)

    operator.to_dense()
    ==> [[1., 4., -9.],
         [2., 1., 4.],
         [3., 2., 1.]]

    operator.shape
    ==> [3, 3]

    operator.log_abs_determinant()
    ==> scalar Tensor

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

    #### Shape compatibility

    This operator acts on [batch] matrix with compatible shape.
    `x` is a batch matrix with compatible shape for `matmul` and `solve` if

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\]


    #### Matrix property hints

    This `LinearOperator` is initialized with boolean flags of the form `is_X`,
    for `X = non_singular, self_adjoint, positive_definite, square`.
    These have the following meaning:

    * If `is_X == True`, callers should expect the operator to have the
      property `X`.  This is a promise that should be fulfilled, but is *not* a
      runtime assert.  For example, finite floating point precision may result
      in these promises being violated.
    * If `is_X == False`, callers should expect the operator to not have `X`.
    * If `is_X == None` (the default), callers should have no expectation either
      way.

    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2"><h2 class="add-link">Args</h2></th></tr>

    <tr>
    <td>
    `col`
    </td>
    <td>
    Shape `[B1,...,Bb, N]` `Tensor` with `b >= 0` `N >= 0`.
    The first column of the operator. Allowed dtypes: `float16`, `float32`,
    `float64`, `complex64`, `complex128`. Note that the first entry of
    `col` is assumed to be the same as the first entry of `row`.
    </td>
    </tr><tr>
    <td>
    `row`
    </td>
    <td>
    Shape `[B1,...,Bb, N]` `Tensor` with `b >= 0` `N >= 0`.
    The first row of the operator. Allowed dtypes: `float16`, `float32`,
    `float64`, `complex64`, `complex128`. Note that the first entry of
    `row` is assumed to be the same as the first entry of `col`.
    </td>
    </tr><tr>
    <td>
    `is_non_singular`
    </td>
    <td>
    Expect that this operator is non-singular.
    </td>
    </tr><tr>
    <td>
    `is_self_adjoint`
    </td>
    <td>
    Expect that this operator is equal to its hermitian
    transpose.  If `diag.dtype` is real, this is auto-set to `True`.
    </td>
    </tr><tr>
    <td>
    `is_positive_definite`
    </td>
    <td>
    Expect that this operator is positive definite,
    meaning the quadratic form `x^H A x` has positive real part for all
    nonzero `x`.  Note that we do not require the operator to be
    self-adjoint to be positive-definite.  See:
    <a href="https://en.wikipedia.org/wiki/Positive-definite_matrix#Extension_for_non-symmetric_matrices">https://en.wikipedia.org/wiki/Positive-definite_matrix#Extension_for_non-symmetric_matrices</a>
    </td>
    </tr><tr>
    <td>
    `is_square`
    </td>
    <td>
    Expect that this operator acts like square [batch] matrices.
    </td>
    </tr><tr>
    <td>
    `name`
    </td>
    <td>
    A name for this `LinearOperator`.
    </td>
    </tr>
    </table>





    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2"><h2 class="add-link">Attributes</h2></th></tr>

    <tr>
    <td>
    `H`
    </td>
    <td>
    Returns the adjoint of the current `LinearOperator`.

    Given `A` representing this `LinearOperator`, return `A*`.
    Note that calling `self.adjoint()` and `self.H` are equivalent.
    </td>
    </tr><tr>
    <td>
    `batch_shape`
    </td>
    <td>
    `TensorShape` of batch dimensions of this `LinearOperator`.

    If this operator acts like the batch matrix `A` with
    `A.shape = [B1,...,Bb, M, N]`, then this returns
    `TensorShape([B1,...,Bb])`, equivalent to `A.get_shape()[:-2]`
    </td>
    </tr><tr>
    <td>
    `col`
    </td>
    <td>

    </td>
    </tr><tr>
    <td>
    `domain_dimension`
    </td>
    <td>
    Dimension (in the sense of vector spaces) of the domain of this operator.

    If this operator acts like the batch matrix `A` with
    `A.shape = [B1,...,Bb, M, N]`, then this returns `N`.
    </td>
    </tr><tr>
    <td>
    `dtype`
    </td>
    <td>
    The `DType` of `Tensor`s handled by this `LinearOperator`.
    </td>
    </tr><tr>
    <td>
    `graph_parents`
    </td>
    <td>
    List of graph dependencies of this `LinearOperator`.
    </td>
    </tr><tr>
    <td>
    `is_non_singular`
    </td>
    <td>

    </td>
    </tr><tr>
    <td>
    `is_positive_definite`
    </td>
    <td>

    </td>
    </tr><tr>
    <td>
    `is_self_adjoint`
    </td>
    <td>

    </td>
    </tr><tr>
    <td>
    `is_square`
    </td>
    <td>
    Return `True/False` depending on if this operator is square.
    </td>
    </tr><tr>
    <td>
    `range_dimension`
    </td>
    <td>
    Dimension (in the sense of vector spaces) of the range of this operator.

    If this operator acts like the batch matrix `A` with
    `A.shape = [B1,...,Bb, M, N]`, then this returns `M`.
    </td>
    </tr><tr>
    <td>
    `row`
    </td>
    <td>

    </td>
    </tr><tr>
    <td>
    `shape`
    </td>
    <td>
    `TensorShape` of this `LinearOperator`.

    If this operator acts like the batch matrix `A` with
    `A.shape = [B1,...,Bb, M, N]`, then this returns
    `TensorShape([B1,...,Bb, M, N])`, equivalent to `A.get_shape()`.
    </td>
    </tr><tr>
    <td>
    `tensor_rank`
    </td>
    <td>
    Rank (in the sense of tensors) of matrix corresponding to this operator.

    If this operator acts like the batch matrix `A` with
    `A.shape = [B1,...,Bb, M, N]`, then this returns `b + 2`.
    </td>
    </tr>
    </table>



    ## Methods

    <h3 id="add_to_tensor"><code>add_to_tensor</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L1014-L1027">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>add_to_tensor(
        x, name='add_to_tensor'
    )
    </code></pre>

    Add matrix represented by this operator to `x`.  Equivalent to `A + x`.


    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `x`
    </td>
    <td>
    `Tensor` with same `dtype` and shape broadcastable to `self.shape`.
    </td>
    </tr><tr>
    <td>
    `name`
    </td>
    <td>
    A name to give this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    A `Tensor` with broadcast shape and same `dtype` as `self`.
    </td>
    </tr>

    </table>



    <h3 id="adjoint"><code>adjoint</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L870-L885">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>adjoint(
        name='adjoint'
    )
    </code></pre>

    Returns the adjoint of the current `LinearOperator`.

    Given `A` representing this `LinearOperator`, return `A*`.
    Note that calling `self.adjoint()` and `self.H` are equivalent.

    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name for this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    `LinearOperator` which represents the adjoint of this `LinearOperator`.
    </td>
    </tr>

    </table>



    <h3 id="assert_non_singular"><code>assert_non_singular</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L484-L502">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>assert_non_singular(
        name='assert_non_singular'
    )
    </code></pre>

    Returns an `Op` that asserts this operator is non singular.

    This operator is considered non-singular if

ConditionNumber \< max{100, range_dimension, domain_dimension} \* eps,
eps := np.finfo(self.dtype.as_numpy_dtype).eps


    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A string name to prepend to created ops.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    An `Assert` `Op`, that, when run, will raise an `InvalidArgumentError` if
    the operator is singular.
    </td>
    </tr>

    </table>



    <h3 id="assert_positive_definite"><code>assert_positive_definite</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L520-L535">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>assert_positive_definite(
        name='assert_positive_definite'
    )
    </code></pre>

    Returns an `Op` that asserts this operator is positive definite.

    Here, positive definite means that the quadratic form `x^H A x` has positive
    real part for all nonzero `x`.  Note that we do not require the operator to
    be self-adjoint to be positive definite.

    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name to give this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    An `Assert` `Op`, that, when run, will raise an `InvalidArgumentError` if
    the operator is not positive definite.
    </td>
    </tr>

    </table>



    <h3 id="assert_self_adjoint"><code>assert_self_adjoint</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L547-L561">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>assert_self_adjoint(
        name='assert_self_adjoint'
    )
    </code></pre>

    Returns an `Op` that asserts this operator is self-adjoint.

    Here we check that this operator is *exactly* equal to its hermitian
    transpose.

    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A string name to prepend to created ops.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    An `Assert` `Op`, that, when run, will raise an `InvalidArgumentError` if
    the operator is not self-adjoint.
    </td>
    </tr>

    </table>



    <h3 id="batch_shape_tensor"><code>batch_shape_tensor</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L318-L338">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>batch_shape_tensor(
        name='batch_shape_tensor'
    )
    </code></pre>

    Shape of batch dimensions of this operator, determined at runtime.

    If this operator acts like the batch matrix `A` with
    `A.shape = [B1,...,Bb, M, N]`, then this returns a `Tensor` holding
    `[B1,...,Bb]`.

    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name for this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    `int32` `Tensor`
    </td>
    </tr>

    </table>



    <h3 id="cholesky"><code>cholesky</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L915-L938">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>cholesky(
        name='cholesky'
    )
    </code></pre>

    Returns a Cholesky factor as a `LinearOperator`.

    Given `A` representing this `LinearOperator`, if `A` is positive definite
    self-adjoint, return `L`, where `A = L L^T`, i.e. the cholesky
    decomposition.

    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name for this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    `LinearOperator` which represents the lower triangular matrix
    in the Cholesky decomposition.
    </td>
    </tr>

    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Raises</th></tr>

    <tr>
    <td>
    `ValueError`
    </td>
    <td>
    When the `LinearOperator` is not hinted to be positive
    definite and self adjoint.
    </td>
    </tr>
    </table>



    <h3 id="determinant"><code>determinant</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L677-L694">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>determinant(
        name='det'
    )
    </code></pre>

    Determinant for every batch member.


    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name for this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    `Tensor` with shape `self.batch_shape` and same `dtype` as `self`.
    </td>
    </tr>

    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Raises</th></tr>

    <tr>
    <td>
    `NotImplementedError`
    </td>
    <td>
    If `self.is_square` is `False`.
    </td>
    </tr>
    </table>



    <h3 id="diag_part"><code>diag_part</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L965-L991">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>diag_part(
        name='diag_part'
    )
    </code></pre>

    Efficiently get the [batch] diagonal part of this operator.

    If this operator has shape `[B1,...,Bb, M, N]`, this returns a
    `Tensor` `diagonal`, of shape `[B1,...,Bb, min(M, N)]`, where
    `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.\]


    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name for this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>

    <tr>
    <td>
    `diag_part`
    </td>
    <td>
    A `Tensor` of same `dtype` as self.
    </td>
    </tr>
    </table>



    <h3 id="domain_dimension_tensor"><code>domain_dimension_tensor</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L393-L414">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>domain_dimension_tensor(
        name='domain_dimension_tensor'
    )
    </code></pre>

    Dimension (in the sense of vector spaces) of the domain of this operator.

    Determined at runtime.

    If this operator acts like the batch matrix `A` with
    `A.shape = [B1,...,Bb, M, N]`, then this returns `N`.

    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name for this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    `int32` `Tensor`
    </td>
    </tr>

    </table>



    <h3 id="inverse"><code>inverse</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L890-L913">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>inverse(
        name='inverse'
    )
    </code></pre>

    Returns the Inverse of this `LinearOperator`.

    Given `A` representing this `LinearOperator`, return a `LinearOperator`
    representing `A^-1`.

    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name scope to use for ops added by this method.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    `LinearOperator` representing inverse of this matrix.
    </td>
    </tr>

    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Raises</th></tr>

    <tr>
    <td>
    `ValueError`
    </td>
    <td>
    When the `LinearOperator` is not hinted to be `non_singular`.
    </td>
    </tr>
    </table>



    <h3 id="log_abs_determinant"><code>log_abs_determinant</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L706-L723">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>log_abs_determinant(
        name='log_abs_det'
    )
    </code></pre>

    Log absolute value of determinant for every batch member.


    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Args</th></tr>

    <tr>
    <td>
    `name`
    </td>
    <td>
    A name for this `Op`.
    </td>
    </tr>
    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Returns</th></tr>
    <tr class="alt">
    <td colspan="2">
    `Tensor` with shape `self.batch_shape` and same `dtype` as `self`.
    </td>
    </tr>

    </table>



    <!-- Tabular view -->
     <table class="responsive fixed orange">
    <colgroup><col width="214px"><col></colgroup>
    <tr><th colspan="2">Raises</th></tr>

    <tr>
    <td>
    `NotImplementedError`
    </td>
    <td>
    If `self.is_square` is `False`.
    </td>
    </tr>
    </table>



    <h3 id="matmul"><code>matmul</code></h3>

    <a target="_blank" href="https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L574-L627">View source</a>

    <pre class="devsite-click-to-copy prettyprint lang-py tfo-signature-link">
    <code>matmul(
        x, adjoint=False, adjoint_arg=False, name='matmul'
    )
    </code></pre>

    Transform [batch] matrix `x` with left multiplication:  `x --> Ax`.

    ```python
    # 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]

<br />

<br />

<br />

| Args ||
|---|---|
| `x` | `LinearOperator` or `Tensor` with compatible shape and same `dtype` as `self`. See class docstring for definition of compatibility. |
| `adjoint` | Python `bool`. If `True`, left multiply by the adjoint: `A^H x`. |
| `adjoint_arg` | Python `bool`. If `True`, compute `A x^H` where `x^H` is the hermitian transpose (transposition and complex conjugation). |
| `name` | A name for this `Op`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A `LinearOperator` or `Tensor` with shape `[..., M, R]` and same `dtype` as `self`. ||

<br />

### `matvec`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L634-L667)

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

Transform \[batch\] vector `x` with left multiplication: `x --> Ax`.

    # Make an operator acting like batch matric 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]

<br />

<br />

<br />

| Args ||
|---|---|
| `x` | `Tensor` with compatible shape and same `dtype` as `self`. `x` is treated as a \[batch\] vector meaning for every set of leading dimensions, the last dimension defines a vector. See class docstring for definition of compatibility. |
| `adjoint` | Python `bool`. If `True`, left multiply by the adjoint: `A^H x`. |
| `name` | A name for this `Op`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A `Tensor` with shape `[..., M]` and same `dtype` as `self`. ||

<br />

### `range_dimension_tensor`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L432-L453)

    range_dimension_tensor(
        name='range_dimension_tensor'
    )

Dimension (in the sense of vector spaces) of the range of this operator.

Determined at runtime.

If this operator acts like the batch matrix `A` with
`A.shape = [B1,...,Bb, M, N]`, then this returns `M`.

<br />

<br />

<br />

| Args ||
|---|---|
| `name` | A name for this `Op`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| `int32` `Tensor` ||

<br />

### `shape_tensor`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L284-L302)

    shape_tensor(
        name='shape_tensor'
    )

Shape of this `LinearOperator`, determined at runtime.

If this operator acts like the batch matrix `A` with
`A.shape = [B1,...,Bb, M, N]`, then this returns a `Tensor` holding
`[B1,...,Bb, M, N]`, equivalent to [`tf.shape(A)`](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/shape).

<br />

<br />

<br />

| Args ||
|---|---|
| `name` | A name for this `Op`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| `int32` `Tensor` ||

<br />

### `solve`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L740-L813)

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

Solve (exact or approx) `R` (batch) systems of equations: `A X = rhs`.

The returned `Tensor` will be close to an exact solution if `A` is well
conditioned. Otherwise closeness will vary. See class docstring for details.

#### Examples:

    # 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

<br />

<br />

<br />

| Args ||
|---|---|
| `rhs` | `Tensor` with same `dtype` as this operator and compatible shape. `rhs` is treated like a \[batch\] matrix meaning for every set of leading dimensions, the last two dimensions defines a matrix. See class docstring for definition of compatibility. |
| `adjoint` | Python `bool`. If `True`, solve the system involving the adjoint of this `LinearOperator`: `A^H X = rhs`. |
| `adjoint_arg` | Python `bool`. If `True`, solve `A X = rhs^H` where `rhs^H` is the hermitian transpose (transposition and complex conjugation). |
| `name` | A name scope to use for ops added by this method. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| `Tensor` with shape `[...,N, R]` and same `dtype` as `rhs`. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `NotImplementedError` | If `self.is_non_singular` or `is_square` is False. |

<br />

### `solvevec`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L821-L868)

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

Solve single equation with best effort: `A X = rhs`.

The returned `Tensor` will be close to an exact solution if `A` is well
conditioned. Otherwise closeness will vary. See class docstring for details.

#### Examples:

    # 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

<br />

<br />

<br />

| Args ||
|---|---|
| `rhs` | `Tensor` with same `dtype` as this operator. `rhs` is treated like a \[batch\] vector meaning for every set of leading dimensions, the last dimension defines a vector. See class docstring for definition of compatibility regarding batch dimensions. |
| `adjoint` | Python `bool`. If `True`, solve the system involving the adjoint of this `LinearOperator`: `A^H X = rhs`. |
| `name` | A name scope to use for ops added by this method. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| `Tensor` with shape `[...,N]` and same `dtype` as `rhs`. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `NotImplementedError` | If `self.is_non_singular` or `is_square` is False. |

<br />

### `tensor_rank_tensor`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L357-L375)

    tensor_rank_tensor(
        name='tensor_rank_tensor'
    )

Rank (in the sense of tensors) of matrix corresponding to this operator.

If this operator acts like the batch matrix `A` with
`A.shape = [B1,...,Bb, M, N]`, then this returns `b + 2`.

<br />

<br />

<br />

| Args ||
|---|---|
| `name` | A name for this `Op`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| `int32` `Tensor`, determined at runtime. ||

<br />

### `to_dense`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L956-L959)

    to_dense(
        name='to_dense'
    )

Return a dense (batch) matrix representing this operator.

### `trace`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.0.0/tensorflow/python/ops/linalg/linear_operator.py#L996-L1008)

    trace(
        name='trace'
    )

Trace of the linear operator, equal to sum of `self.diag_part()`.

If the operator is square, this is also the sum of the eigenvalues.

<br />

<br />

<br />

| Args ||
|---|---|
| `name` | A name for this `Op`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| Shape `[B1,...,Bb]` `Tensor` of same `dtype` as `self`. ||

<br />