Main Content

tensorprod

2 つのテンソルのテンソル積

説明

C = tensorprod(A,B,dimA,dimB) は、テンソル ABテンソル積を返します。引数 dimAdimB は、AB で縮約する次元を指定するベクトルです。出力テンソルのサイズは、A の縮約されない次元のサイズに B の縮約されない次元のサイズが続くサイズになります。

C = tensorprod(A,B,dim) は、AB の両方で縮約する同じ次元を指定します。

C = tensorprod(A,B) は、テンソル AB外積を返します。この構文は、前述のいずれかの構文で dimA = dimB = [] または dim = [] を使用することと等価です。出力テンソルのサイズは [size(A) size(B)] です。

C = tensorprod(A,B,"all") は、テンソル AB内積を返します。これらのテンソルは同じサイズでなければなりません。出力はスカラーです。

C = tensorprod(___,NumDimensionsA=ndimsA) は、前述の構文の任意の入力引数の組み合わせに加えて、テンソル A の次元数をオプションで指定します。このオプションは、A の末尾に大きさが 1 の次元があり、それらを出力に渡す必要がある場合に使用します。たとえば、tensorprod(A,B,NumDimensionsA=4) は、合計で 4 つの次元がある A について、テンソル AB の外積を計算します。

すべて折りたたむ

乱数要素をもつ 2 つの 3 次元テンソルを作成します。

A = rand(3,2,5);
B = rand(2,4,5);

AB のテンソル積を計算し、A の 2 番目の次元を B の 1 番目の次元で縮約します。結果のテンソルには、A の縮約されない次元に続いて B の縮約されない次元が含まれます。

C = tensorprod(A,B,2,1);
size(C)
ans = 1×4

     3     5     4     5

テンソル積で複数の次元を縮約するには、縮約する次元をベクトルとして指定します。AB のテンソル積をもう一度計算し、今度は次のように 2 つの次元を縮約します。

  • A の 2 番目の次元を B の 1 番目の次元で縮約します。

  • A の 3 番目の次元を B の 3 番目の次元で縮約します。

D = tensorprod(A,B,[2 3],[1 3]);
size(D)
ans = 1×2

     3     4

乱数要素をもつ 2 つの 4 次元テンソルを作成します。

A = rand(7,3,6,5);
B = rand(9,3,4,5);

AB のテンソル積を計算し、各テンソルの 2 番目と 4 番目の次元を縮約します。結果のサイズを確認します。

C = tensorprod(A,B,[2 4]);
size(C)
ans = 1×4

     7     6     9     4

乱数要素をもつ 2 つのテンソルを作成します。

A = rand(3,2,3);
B = rand(4,4,3,3);

2 つのテンソルの外積を計算します。結果のサイズを確認します。

C = tensorprod(A,B);
size(C)
ans = 1×7

     3     2     3     4     4     3     3

tensorprod は 2 つのテンソルの要素のすべての組み合わせを乗算するため、結果のテンソルのサイズは [size(A) size(B)] と等しくなります。

乱数要素をもつ同じサイズの 2 つの 4 次元テンソルを作成します。

A = rand(4,4,3,2);
B = rand(4,4,3,2);

テンソルの内積を計算し、"all" オプションを指定してすべての次元を縮約します。

C = tensorprod(A,B,"all")
C = 23.6148

乱数要素をもつ 2 つの 4 次元テンソルを作成します。A の末尾にサイズが 1 の次元があり、MATLAB では慣例により無視されます。

A = rand(3,4,5,1);
B = rand(4,5,6,7);

AB のテンソル積を計算し、A の 2 番目と 3 番目の次元を B の 1 番目と 2 番目の次元で縮約します。A の末尾にある大きさが 1 の次元は MATLAB で無視されるため、結果には次元が 3 つだけ含まれます。

C = tensorprod(A,B,[2 3],[1 2]);
size(C)
ans = 1×3

     3     6     7

A の大きさが 1 の次元を保持するには、NumDimensionsA オプションを使用して A の次元数を指定します。結果に 4 つの次元が含まれるようになります。

D = tensorprod(A,B,[2 3],[1 2],NumDimensionsA=4);
size(D)
ans = 1×4

     3     1     6     7

入力引数

すべて折りたたむ

入力テンソル。配列として指定します。tensorprod は、計算時に複素数入力の共役を計算しません。共役が必要な場合は、conj(A) または conj(B) を使用して複素数入力の共役を計算してから tensorprod に渡します。

データ型: single | double
複素数のサポート: あり

AB で縮約する次元。ベクトルとして指定します。dimAdimB は同じ長さでなければならず、ペア単位で一致している必要があります。縮約された次元のサイズも一致する必要があるため、size(A,dimA)size(B,dimB) と等しくなければなりません。

例: tensorprod(A,B,[1 3],[2 4]) は、A の 1 番目の次元を B の 2 番目の次元で縮約し、A の 3 番目の次元を B の 4 番目の次元で縮約します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

AB の両方で縮約する次元。ベクトルとして指定します。縮約された次元のサイズが一致する必要があるため、size(A,dim)size(B,dim) と等しくなければなりません。

例: tensorprod(A,B,[1 3]) は、A の 1 番目の次元を B の 1 番目の次元で縮約し、A の 3 番目の次元を B の 3 番目の次元で縮約します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

A の次元数。スカラーとして指定します。このオプションは、A の末尾に大きさが 1 の次元があり、それらを出力に渡す必要がある場合に使用します。

例: tensorprod(A,B,NumDimensionsA=4) は、合計で 4 つの次元がある A について、テンソル AB の外積を計算します。

詳細

すべて折りたたむ

内積

2 つのテンソルの内積は、dot で計算されるベクトルのドット積演算を一般化したものです。テンソルの対応するすべての次元でドット積演算 (乗算と加算) が実行されるため、この演算はスカラー値を返します。この演算では、テンソルのサイズが同じでなければなりません。

たとえば、テンソル U と V の次元が同じ n 個の (i, j, k, ..., n) である場合、内積 tensorprod(U,V,"all") は次の総和で与えられます。

nkjiUi,j,k,,nVi,j,k,,n=w

外積

テンソルの外積は、kron で計算される 2 次元行列のクロネッカー積を一般化したものです。2 つのテンソルの外積は、それらの要素のすべての組み合わせを乗算します。テンソルの次元はいずれも縮約されないため、出力は大きいテンソルになります。

たとえば、テンソル U の次元が (i, j, k, ...) で、テンソル V の次元が (l, m, n, ...) である場合、外積 tensorprod(U,V) は以下で与えられます。

Ui,j,k,Vl,m,n,=Wi,j,k,,l,m,n,

テンソル積

テンソル積は、内積と外積の演算を組み合わせたものです。各テンソルの同じサイズの次元のペアを指定して、内積によって相互に "縮約" できます。これにより、それらの次元が乗算および加算されて次元サイズが 1 に縮小されます。指定したすべての次元が縮約された後、残りの次元で外積演算が実行され、それらの要素のすべての組み合わせが乗算されます。

たとえば、テンソル U の次元が (i, j, k) で、テンソル V の次元が (i, j, m) である場合、テンソル積 tensorprod(U,V,[1 2]) は各テンソルの最初の 2 つの次元を相互に縮約し、結果の次元は (k, m) になります。

jiUi,j,kVi,j,m=Wk,m

バージョン履歴

R2022a で導入

参考

| | |

トピック