# tensordot¶

tensordot(x1: array, x2: array, /, *, axes: int | Tuple[Sequence[int], Sequence[int]] = 2) array

Returns a tensor contraction of `x1` and `x2` over specific axes.

Note

The `tensordot` function corresponds to the generalized matrix product.

Parameters:
• x1 (array) – first input array. Should have a numeric data type.

• x2 (array) –

second input array. Should have a numeric data type. Corresponding contracted axes of `x1` and `x2` must be equal.

Note

Contracted axes (dimensions) must not be broadcasted.

• axes (Union[int, Tuple[Sequence[int], Sequence[int]]]) –

number of axes (dimensions) to contract or explicit sequences of axis (dimension) indices for `x1` and `x2`, respectively.

If `axes` is an `int` equal to `N`, then contraction must be performed over the last `N` axes of `x1` and the first `N` axes of `x2` in order. The size of each corresponding axis (dimension) must match. Must be nonnegative.

• If `N` equals `0`, the result is the tensor (outer) product.

• If `N` equals `1`, the result is the tensor dot product.

• If `N` equals `2`, the result is the tensor double contraction (default).

If `axes` is a tuple of two sequences `(x1_axes, x2_axes)`, the first sequence must apply to `x1` and the second sequence to `x2`. Both sequences must have the same length. Each axis (dimension) `x1_axes[i]` for `x1` must have the same size as the respective axis (dimension) `x2_axes[i]` for `x2`. Each index referred to in a sequence must be unique. If `x1` has rank (i.e, number of dimensions) `N`, a valid `x1` axis must reside on the half-open interval `[-N, N)`. If `x2` has rank `M`, a valid `x2` axis must reside on the half-open interval `[-M, M)`.

Note

If either `x1` or `x2` has a complex floating-point data type, neither argument must be complex-conjugated or transposed. If conjugation and/or transposition is desired, these operations should be explicitly performed prior to computing the generalized matrix product.

Returns:

out (array) – an array containing the tensor contraction whose shape consists of the non-contracted axes (dimensions) of the first array `x1`, followed by the non-contracted axes (dimensions) of the second array `x2`. The returned array must have a data type determined by Type Promotion Rules.

Notes

Changed in version 2022.12: Added complex data type support.

Changed in version 2023.12: Allow negative axes.