### Navigation

- index
- modules |
- modules |
- next |
- previous |
- NumPy v1.5 Manual (DRAFT) »
- NumPy Reference »
- Routines »
- Linear algebra (`numpy.linalg`) »

# numpy.tensordot

`numpy.``tensordot`(a, b, axes=2)

  Compute tensor dot product along specified axes for arrays >= 1-D.

  Given two tensors (arrays of dimension greater than or equal to one), `a` and `b`, and an array_like object containing two array_like objects, `(a_axes, b_axes)`, sum the products of `a`‘s and `b`‘s elements (components) over the axes specified by `a_axes` and `b_axes`. The third argument can be a single non-negative integer_like scalar, `N`; if it is such, then the last `N` dimensions of `a` and the first `N` dimensions of `b` are summed over.

  Parameters : | a, b : array_like, len(shape) >= 1 Tensors to “dot”. axes : variable type * integer_like scalar : Number of axes to sum over (applies to both arrays); or * array_like, shape = (2,), both elements array_like : Axes to be summed over, first sequence applying to `a`, second to `b`.

  See also

  `numpy.dot`

  Notes

  When there is more than one axis to sum over - and they are not the last (first) axes of `a` (`b`) - the argument `axes` should consist of two sequences of the same length, with the first axis to sum over given first in both sequences, the second axis second, and so forth.

  Examples

  A “traditional” example:

      >>> a = np.arange(60.).reshape(3,4,5)
      >>> b = np.arange(24.).reshape(4,3,2)
      >>> c = np.tensordot(a,b, axes=([1,0],[0,1]))
      >>> c.shape
      (5, 2)
      >>> c
      array([[ 4400.,  4730.],
             [ 4532.,  4874.],
             [ 4664.,  5018.],
             [ 4796.,  5162.],
             [ 4928.,  5306.]])
      >>> # A slower but equivalent way of computing the same...
      >>> d = np.zeros((5,2))
      >>> for i in range(5):
      ...   for j in range(2):
      ...     for k in range(3):
      ...       for n in range(4):
      ...         d[i,j] += a[k,n,i] * b[n,k,j]
      >>> c == d
      array([[ True,  True],
             [ True,  True],
             [ True,  True],
             [ True,  True],
             [ True,  True]], dtype=bool)

  An extended example taking advantage of the overloading of + and *:

      >>> a = np.array(range(1, 9))
      >>> a.shape = (2, 2, 2)
      >>> A = np.array(('a', 'b', 'c', 'd'), dtype=object)
      >>> A.shape = (2, 2)
      >>> a; A
      array([[[1, 2],
              [3, 4]],
             [[5, 6],
              [7, 8]]])
      array([[a, b],
             [c, d]], dtype=object)

      >>> np.tensordot(a, A) # third argument default is 2
      array([abbcccdddd, aaaaabbbbbbcccccccdddddddd], dtype=object)

      >>> np.tensordot(a, A, 1)
      array([[[acc, bdd],
              [aaacccc, bbbdddd]],
             [[aaaaacccccc, bbbbbdddddd],
              [aaaaaaacccccccc, bbbbbbbdddddddd]]], dtype=object)

      >>> np.tensordot(a, A, 0) # "Left for reader" (result too long to incl.)
      array([[[[[a, b],
                [c, d]],
                ...

      >>> np.tensordot(a, A, (0, 1))
      array([[[abbbbb, cddddd],
              [aabbbbbb, ccdddddd]],
             [[aaabbbbbbb, cccddddddd],
              [aaaabbbbbbbb, ccccdddddddd]]], dtype=object)

      >>> np.tensordot(a, A, (2, 1))
      array([[[abb, cdd],
              [aaabbbb, cccdddd]],
             [[aaaaabbbbbb, cccccdddddd],
              [aaaaaaabbbbbbbb, cccccccdddddddd]]], dtype=object)

      >>> np.tensordot(a, A, ((0, 1), (0, 1)))
      array([abbbcccccddddddd, aabbbbccccccdddddddd], dtype=object)

      >>> np.tensordot(a, A, ((2, 1), (1, 0)))
      array([acccbbdddd, aaaaacccccccbbbbbbdddddddd], dtype=object)

### Navigation

- index
- modules |
- modules |
- next |
- previous |
- NumPy v1.5 Manual (DRAFT) »
- NumPy Reference »
- Routines »
- Linear algebra (`numpy.linalg`) »