Movatterモバイル変換


[0]ホーム

URL:


SciPy

numpy.tensordot

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

Tensors to “dot”.

axes : int or (2,) array_like

  • integer_likeIf an int N, sum over the last N axes ofa and the first N axesofb in order. The sizes of the corresponding axes must match.
  • (2,) array_likeOr, a list of axes to be summed over, first sequence applying toa,second tob. Both elements array_like must be of the same length.

See also

dot,einsum

Notes

Three common use cases are:
  • axes=0 : tensor producta\otimes b
  • axes=1 : tensor dot producta\cdot b
  • axes=2 : (default) tensor double contractiona:b

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)

Previous topic

numpy.matmul

Next topic

numpy.einsum

  • © Copyright 2008-2009, The Scipy community.
  • Last updated on Jun 10, 2017.
  • Created usingSphinx 1.5.3.

[8]ページ先頭

©2009-2025 Movatter.jp