ArrayDot
詳細
- ArrayDot[a,b,k]の引数 a と b は,それぞれ次元が{m1,…,mp,d1,…,dk}と{d1,…,dk,n1,…,nq}の配列でなければならない.結果は次元が{m1,…,mp,n1,…,nq}の配列 c で, ci1,…,ip,j1,…,jq
ai1,…,ip,α1,…,αkbα1,…,αk,j1,…,jqである. - ArrayDot[a,b,{{s1,t1},…,{sk,tk}}]の引数 a と b は次元がそれぞれ{m1,…,mp}と{n1,…,nq}の配列でなければならない.ここで,すべての siと tiは他と異なり,すべての i について1≤si≤p,1≤ti≤q,msintiである.結果はTensorContract[ab,{{s1,p+t1},…,{sk,p+tk}}]に等しい.
- ArrayDotは,SparseArrayオブジェクトおよび構造化配列オブジェクトに使うことができる.
- ArrayDotは,配列微分連鎖法則に使用される.
例題
すべて開く すべて閉じる例 (3)
2つの次元でArrayDotを計算する:
a = RandomReal[1, {2, 3, 4}];
b = RandomReal[1, {3, 4, 5}];
ArrayDot[a, b, 2]指定された次元のペアでArrayDotを計算する:
a = RandomReal[1, {2, 3, 4, 5}];
b = RandomReal[1, {5, 4, 3, 2}];
ArrayDot[a, b, {{1, 4}, {2, 3}, {3, 2}, {4, 1}}]ArrayDotは配列微分連鎖法則に使用される:
v = VectorSymbol["v", d];
g = MatrixSymbol["g", {m, n}];
f = ArraySymbol["f", {p, q, r}];D[f[g[v]], v]スコープ (9)
a = RandomInteger[{-10, 10}, {2, 3, 4}];
b = RandomInteger[{-10, 10}, {3, 4, 5}];ArrayDot[a, b, 2]//MatrixForma = RandomReal[{-10, 10}, {2, 3, 4, 5}];
b = RandomReal[{-10, 10}, {3, 4, 5, 6, 7}];ArrayDot[a, b, 3]//MatrixForma = RandomComplex[{-10 - 10I, 10 + 10I}, {2, 3, 3}];
b = RandomComplex[{-10 - 10I, 10 + 10I}, {3, 3, 2}];ArrayDot[a, b, {{1, 3}, {2, 2}}]//MatrixForma = Array[Subscript[A, ##]&, {2, 3, 4}];
b = Array[Subscript[B, ##]&, {3, 4, 2}];ArrayDot[a, b, 2]ℱ = FiniteField[29, 4];
a = FromFiniteFieldIndex[RandomInteger[{0, 29 ^ 4 - 1}, {3, 4, 5}], ℱ];
b = FromFiniteFieldIndex[RandomInteger[{0, 29 ^ 4 - 1}, {4, 5, 3}], ℱ];
ArrayDot[a, b, 2]//MatrixForma = Map[CenteredInterval, RandomReal[{-10, 10}, {2, 3, 4, 5}, WorkingPrecision -> 10], {4}];
b = Map[CenteredInterval, RandomReal[{-10, 10}, {3, 4, 5, 2, 3}, WorkingPrecision -> 10], {5}];
(c = ArrayDot[a, b, 3])//MatrixFormranrep[e_CenteredInterval] := e["Center"] + RandomInteger[{-1000, 1000}] / 1000 e["Radius"]
arep = Map[ranrep, a, {4}];
brep = Map[ranrep, b, {5}];
(crep = ArrayDot[arep, brep, 3])//MatrixFormArrayDot[a,b,3]がArrayDot[arep,brep,3]を含んでいることを確認する:
MapThread[IntervalMemberQ, {c, crep}, 3]//MatrixForm疎な配列のArrayDotは,疎な配列である:
a = SparseArray[{{i_, i_, i_} -> 1, {1, i_, i_} -> 2}, {2, 3, 4}]b = SparseArray[{{i_, i_, i_} -> 3, {1, i_, i_} -> 4}, {3, 4, 5}]ArrayDot[a, b, 2]%//MatrixForma = SymmetrizedArray[{{1, 2, 3, 4} -> 1, {2, 1, 3, 2} -> 2}, {4, 4, 4, 4}, Symmetric[{1, 2, 3}]]b = SymmetrizedArray[{{1, 2, 3, 4} -> 1, {2, 1, 3, 2} -> 2}, {4, 4, 4, 4}, Symmetric[{2, 3, 4}]]ArrayDot[a, b, 3]a = RandomReal[{0, 9}, {100, 100, 100}];
b = RandomComplex[1 + I, {100, 100, 100}];
ArrayDot[a, b, 2];//AbsoluteTimingアプリケーション (1)
a = RandomInteger[{-10 ^ 6, 10 ^ 6}, {7, 7}] / 10 ^ 6;
eps = RandomInteger[{-10 ^ 6, 10 ^ 6}, {7, 7}] / 10 ^ 16;t0 = Det[a];N[Det[a + eps] - t0, 20]m = MatrixSymbol["m", {7, 7}];
d1 = D[Det[m], m]t1 = t0 + ArrayDot[d1 /. m -> a, eps, 2];N[Det[a + eps] - t1, 20]d2 = D[d1, m]t2 = t1 + 1 / 2ArrayDot[ArrayDot[Normal[d2 /. m -> a], eps, 2], eps, 2];N[Det[a + eps] - t2, 20]特性と関係 (9)
ArrayDotは,各引数において線形である:
a1 = RandomInteger[{-10, 10}, {2, 3, 4}];
a2 = RandomInteger[{-10, 10}, {2, 3, 4}];
b1 = RandomInteger[{-10, 10}, {3, 4, 5}];
b2 = RandomInteger[{-10, 10}, {3, 4, 5}];ArrayDot[3 a1 + 5 a2, b1, 2] === 3 ArrayDot[a1, b1, 2] + 5 ArrayDot[a2, b1, 2]ArrayDot[a1, 7b1 + 9b2, 2] === 7 ArrayDot[a1, b1, 2] + 9 ArrayDot[a1, b2, 2]a = RandomInteger[{-10, 10}, {2, 3, 4}];
b = RandomInteger[{-10, 10}, {4, 3, 2}];ArrayDot[a, b, 1] === a.bSymbolicIdentityArrayはArrayDotの単位元である:
a = ArraySymbol["a", {m, n, p, q, r}]ArrayDot[SymbolicIdentityArray[{m, n}], a, 2]ArrayDot[a, SymbolicIdentityArray[{p, q, r}], 3]厳密行列 a について,Norm[a,"Frobenius"]はArrayDot[a,a,2]の平方根に等しい:
a = RandomInteger[{-10, 10}, {5, 5}];Norm[a, "Frobenius"]Sqrt[ArrayDot[a, a, 2]]c=ArrayDot[a,b, k]なら ci1,…,ip,j1,…,jq
ai1,…,ip,α1,…,αkbα1,…,αk,j1,…,jqである:
a = RandomInteger[{-10, 10}, {2, 3, 4}];
b = RandomInteger[{-10, 10}, {3, 4, 5}];ArrayDot[a, b, 2] === Table[Sum[a[[i, k, l]]b[[k, l, j]], {k, 3}, {l, 4}], {i, 2}, {j, 5}]ArrayDepth[ArrayDot[a,b,k]]はArrayDepth[a]+ArrayDepth[b]-2kに等しい:
a = RandomInteger[{-10, 10}, {2, 3, 4, 5}];
b = RandomInteger[{-10, 10}, {3, 4, 5, 6, 7}];ArrayDepth[ArrayDot[a, b, 3]] == ArrayDepth[a] + ArrayDepth[b] - 6ArrayDotはTensorProductとTensorContractの組合せとして実装できる:
a = RandomInteger[{-10, 10}, {2, 3, 4, 5}];
b = RandomInteger[{-10, 10}, {4, 5, 6, 7}];ArrayDot[a, b, 2] === TensorContract[TensorProduct[a, b], {{3, 5}, {4, 6}}]ArrayDotはFlattenとDotの組合せとして実装できる:
a = RandomInteger[{-10, 10}, {2, 3, 4, 5}];
b = RandomInteger[{-10, 10}, {4, 5, 6, 7}];ArrayDot[a, b, 2] === Flatten[a, {{1}, {2}, {3, 4}}].Flatten[b, {{1, 2}, {3}, {4}}]ArrayDotは,配列の微分連鎖律で使われる:
a = MatrixSymbol["a", {m, n}];
b = MatrixSymbol["b", {n, m}];D[Det[a.b[x]], x]関連するガイド
テキスト
Wolfram Research (2024), ArrayDot, Wolfram言語関数, https://reference.wolfram.com/language/ref/ArrayDot.html.
CMS
Wolfram Language. 2024. "ArrayDot." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/ArrayDot.html.
APA
Wolfram Language. (2024). ArrayDot. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ArrayDot.html
BibTeX
@misc{reference.wolfram_2026_arraydot, author="Wolfram Research", title="{ArrayDot}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/ArrayDot.html}", note=[Accessed: 16-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_arraydot, organization={Wolfram Research}, title={ArrayDot}, year={2024}, url={https://reference.wolfram.com/language/ref/ArrayDot.html}, note=[Accessed: 16-August-2026]}