numpy.tensordot(a,b,axes=2)[source]¶Compute tensor dot product along specified axes for arrays >= 1-D.
Given two tensors (arrays of dimension greater than or equal to one),a andb, and an array_like object containing two array_likeobjects,(a_axes,b_axes), sum the products ofa‘s andb‘selements (components) over the axes specified bya_axes andb_axes. The third argument can be a single non-negativeinteger_like scalar,N; if it is such, then the lastNdimensions ofa and the firstN dimensions ofb are summedover.
| Parameters: | a, b : array_like, len(shape) >= 1
axes : int or (2,) array_like
|
|---|
Notes
axes=0 : tensor product
axes=1 : tensor dot product
axes=2 : (default) tensor double contraction
Whenaxes is integer_like, the sequence for evaluation will be: firstthe -Nth axis ina and 0th axis inb, and the -1th axis ina andNth axis inb last.
When there is more than one axis to sum over - and they are not the last(first) axes ofa (b) - the argumentaxes should consist oftwo sequences of the same length, with the first axis to sum over givenfirst 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)>>>carray([[ 4400., 4730.], [ 4532., 4874.], [ 4664., 5018.], [ 4796., 5162.], [ 4928., 5306.]])>>># A slower but equivalent way of computing the same...>>>d=np.zeros((5,2))>>>foriinrange(5):...forjinrange(2):...forkinrange(3):...forninrange(4):...d[i,j]+=a[k,n,i]*b[n,k,j]>>>c==darray([[ 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;Aarray([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])array([[a, b], [c, d]], dtype=object)
>>>np.tensordot(a,A)# third argument default is 2 for double-contractionarray([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)# tensor product (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)