TensorContract[tensor,{{s11,s12},{s21,s22},…}]
スロットペア{si1,si2}における tensor の縮約を与える.
TensorContract
TensorContract[tensor,{{s11,s12},{s21,s22},…}]
スロットペア{si1,si2}における tensor の縮約を与える.
詳細
- TensorContract[tensor,pairs]の第1引数は,任意のテンソルオブジェクト,特に,明示的な配列あるいは記号配列,あるいはテンソル積,転置等の組合せでよい
- スロット sij はすべて,縮約されたテンソルの階数より大きくはない,異なる正の整数でなければならない.
- 各ペアの中で縮約されたスロットはすべて同じ次元でなければならないが,異なるペアは異なる次元と関連付けられている場合もある.
- TensorContractの第1引数中の記号テンソルについては,各縮約のスロットがソートされた後で,第2引数中の縮約がソートされる.
- TensorContract[tensor,{}]は tensor を返す.
例題
すべて開く すべて閉じる例 (3)
TensorContract[{{{Subscript[a, 1, 1, 1], Subscript[a, 1, 1, 2]}, {Subscript[a, 1, 2, 1], Subscript[a, 1, 2, 2]}}, {{Subscript[a, 2, 1, 1], Subscript[a, 2, 1, 2]}, {Subscript[a, 2, 2, 1], Subscript[a, 2, 2, 2]}}}, {{2, 3}}]A = Array[Subscript[a, ##]&, {2, 3, 2, 3}];TensorContract[A, {{1, 3}, {2, 4}}]$Assumptions = A∈Arrays[{3, 2, 3}];TensorContract[A, {{1, 3}}]TensorContract[A, {{1, 2}}]スコープ (3)
A1 = {{{a, b}, {b, c}}, {{f, g}, {h, i}}};
TensorContract[A1, {{2, 3}}]A2 = SparseArray[A1];
TensorContract[A2, {{2, 3}}]A3 = SymmetrizedArray[A1];
TensorContract[A3, {{2, 3}}]$Assumptions = A∈Arrays[{d1, d1, d2, d2}];TensorContract[A, {{3, 4}, {2, 1}}]TensorDimensions[%]TensorContract[A, {{1, 3}}]TensorContract[TensorContract[A, {{1, 3}}], {{1, 2}}]一般化と拡張 (1)
配列の場合は,関数SymbolicTensors`ArrayContractを使って3つ以上のスロットの縮約を行うことができる:
A = Array[Subscript[a, ##]&, {3, 2, 3, 2, 3}];SymbolicTensors`ArrayContract[A, {{1, 3, 5}}]Plusの役割を一般化して任意の頭部を指定することも可能である:
SymbolicTensors`ArrayContract[A, {{1, 3, 5}}, g]縮約は,レベルが縮約の頭部 g 内部に残すような方法で行うこともできる:
SymbolicTensors`ArrayContract[A, {{2, 4}}, g, 4]特性と関係 (8)
配列の第1レベルでの縮約はTrと等価である:
A = Array[a, {3, 3, 3}];TensorContract[A, {{1, 2}}] === Tr[A, Plus, 2]配列のテンソル積の縮約はDotおよびInnerと等価である:
A = Array[a, {2, 2, 2}];
B = Array[b, {2, 2}];
F = Array[f, {2, 3, 2}];Innerは2つの配列間の1つの縮約を行う:
TensorContract[AB, {{3, 4}}] === Inner[Times, A, B]
引数のDotは,引数間で
の縮約を行う:
TensorContract[ABF, {{3, 4}, {5, 6}}] === Expand@Dot[A, B, F]TransposeとApplyの組合せで任意の縮約も行うことができる:
A = Array[a, {2, 3, 2, 3, 2}];TensorContract[A, {{1, 5}, {2, 4}}] === Apply[Plus, Transpose[A, {2, 3, 1, 3, 2}], 2]A = SymmetrizedArray[pos_ :> a@@pos, {3, 3, 3, 3}, {Antisymmetric[{1, 2}], Antisymmetric[{3, 4}]}]TensorContract[A, {{1, 2}}]Normal[%]レベル1とレベル3は反対称ペアではないので,結果は0ではない:
TensorContract[A, {{1, 3}}]Normal[%]$Assumptions = A∈Arrays[{3, 3, 3, 3}, Complexes, Antisymmetric[{1, 2, 3}]];TensorContract[A, {{1, 3}}]//TensorReduceその他の場合では,式が正準化され,縮約が可能な最後のスロットに移動される:
TensorContract[A, {{2, 4}}]//TensorReduceTensorContract[tensor,{}]は tensor が何かにかかわらず tensor を返す:
TensorContract[I, {}]TensorContractをTensorProductと組み合せてDotの補間に使うことができる:
v = Array[x, {3}];
a = Array[y, {3, 3, 3}];
m = Array[z, {3, 3}];v.a.m == TensorContract[vam, {{1, 2}, {4, 5}}]//Simplify関連するガイド
テキスト
Wolfram Research (2012), TensorContract, Wolfram言語関数, https://reference.wolfram.com/language/ref/TensorContract.html.
CMS
Wolfram Language. 2012. "TensorContract." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/TensorContract.html.
APA
Wolfram Language. (2012). TensorContract. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/TensorContract.html
BibTeX
@misc{reference.wolfram_2026_tensorcontract, author="Wolfram Research", title="{TensorContract}", year="2012", howpublished="\url{https://reference.wolfram.com/language/ref/TensorContract.html}", note=[Accessed: 09-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_tensorcontract, organization={Wolfram Research}, title={TensorContract}, year={2012}, url={https://reference.wolfram.com/language/ref/TensorContract.html}, note=[Accessed: 09-October-2026]}