# tf.tensordot

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/ops/math_ops.py#L5024-L5203) |

Tensor contraction of a and b along specified axes and outer product.

#### View aliases


**Main aliases**

[`tf.linalg.tensordot`](https://www.tensorflow.org/api_docs/python/tf/tensordot)
**Compat aliases for migration**

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

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

<br />

    tf.tensordot(
        a, b, axes, name=None
    )

Tensordot (also known as tensor contraction) sums the product of elements
from `a` and `b` over the indices specified by `axes`.

This operation corresponds to `numpy.tensordot(a, b, axes)`.

Example 1: When `a` and `b` are matrices (order 2), the case `axes=1`
is equivalent to matrix multiplication.

Example 2: When `a` and `b` are matrices (order 2), the case
`axes = [[1], [0]]` is equivalent to matrix multiplication.

Example 3: When `a` and `b` are matrices (order 2), the case `axes=0` gives
the outer product, a tensor of order 4.

Example 4: Suppose that \\(a_{ijk}\\) and \\(b_{lmn}\\) represent two
tensors of order 3. Then, `contract(a, b, [[0], [2]])` is the order 4 tensor
\\(c_{jklm}\\) whose entry
corresponding to the indices \\((j,k,l,m)\\) is given by:

\\( c_{jklm} = \\sum_i a_{ijk} b_{lmi} \\).

In general, `order(c) = order(a) + order(b) - 2*len(axes[0])`.

<br />

<br />

<br />

| ## Args ||
|---|---|
| `a` | `Tensor` of type `float32` or `float64`. |
| `b` | `Tensor` with the same type as `a`. |
| `axes` | Either a scalar `N`, or a list or an `int32` `Tensor` of shape \[2, k\]. If axes is a scalar, sum over the last N axes of a and the first N axes of b in order. If axes is a list or `Tensor` the first and second row contain the set of unique integers specifying axes along which the contraction is computed, for `a` and `b`, respectively. The number of axes for `a` and `b` must be equal. If `axes=0`, computes the outer product between `a` and `b`. |
| `name` | A name for the operation (optional). |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| A `Tensor` with the same type as `a`. ||

<br />

<br />

<br />

<br />

| ## Raises ||
|---|---|
| `ValueError` | If the shapes of `a`, `b`, and `axes` are incompatible. |
| `IndexError` | If the values in axes exceed the rank of the corresponding tensor. |

<br />