a.b.c またはDot[a,b,c]
ベクトルや行列,テンソルの積を与える.
Dot 
a.b.c またはDot[a,b,c]
ベクトルや行列,テンソルの積を与える.
詳細
- a.b は,a と b が適切な次元を持ったリストであるときに,具体的な結果を与える.a の最後の指数を b の最初の指数で縮約する.
- Dotの応用例
-
{a1,a2}.{b1,b2} ベクトルのスカラー積 {a1,a2}.{{m11,m12},{m21,m22}}ベクトルと行列の積 {{m11,m12},{m21,m22}}.{a1,a2}行列とベクトルの積 {{m11,m12},{m21,m22}}.{{n11,n12},{n21,n22}}2個の行列の積 - Dotを2個のテンソル
および
に適用した結果は,やはりテンソルで
となる.Dotを
階のテンソルと
階のテンソルに適用すると,
階のテンソルが与えられる. » - Dotは,SparseArrayオブジェクトおよび構造化配列オブジェクトに使うことができる.可能な場合は入力と同じタイプのオブジェクトが返される. »
- Dotはすべての引数において線形である. » ベクトルに対して複素(ハミルトン)内積を定義はしない. »
- 引数がリストや疎な配列ではない場合,Dotは未評価でおかれる.DotはFlat属性を持つ.
例題
すべて開く すべて閉じる例 (4)
{a, b, c} . {x, y, z}u = {1, 1};
v = {-1, 1};
u.vθ = VectorAngle[u, v]GeometricScene[{"u" -> u, "v" -> v}, {PlanarAngle[{u, {0, 0}, v}] == θ}]["Graphics"]{{a, b}, {c, d}} . {x, y}{x, y} . {{a, b}, {c, d}}{x, y} . {{a, b}, {c, d}} . {r, s}{{a, b}, {c, d}} . {{1, 2}, {3, 4}} //MatrixForm{{1, 2}, {3, 4}} .{{a, b}, {c, d}} //MatrixForm{{1, 2, 3}, {4, 5, 6}} .{{a, b}, {c, d}, {e, f}} //MatrixFormスコープ (28)
ベクトルのドット積 (7)
Dot[{3.2, 4.2, 5.2}, {0.75, 1.1, 0.0625}]{1, 2, 3, 4, 5}.{1, 8, 9, 0, -1}{a, b, c} . {0, b, d + e}{u, v} = RandomReal[4, {2, 3}, WorkingPrecision -> 20]u.vDotには複素入力も使えるが,それらのいずれも共役しない:
u = {1, 2 - I};
v = {z, 3};
u.v複素(エルミート)内積の計算をする場合は,Conjugateを入力の一つに適用するとよい:
cDot[a_, b_] := Conjugate[a].bcDot[u, v]参考文献,特に数学文献の中には,第2引数を共役させるものもある:
cDot2[a_, b_] := a.Conjugate[b]cDot2[u, v]{Sqrt[cDot[u, u]], Sqrt[cDot2[u, u]]}Normを使って結果を確かめる:
Norm[u]v = SparseArray[{1 -> 1, 50 -> 3}, {100}]w = SparseArray[{50 -> 7, 100 -> 5}, {100}]v.w2つのQuantityArrayベクトルのスカラー積を計算する:
x = QuantityArray[{1, 2, 3}, "Meters"]f = QuantityArray[{0, 0, -9.8}, "Newtons"]x.f行列とベクトルの乗算 (5)
r = {{0.187902, 0.498054, 0.767621}, {0.226789, 0.852257, 0.819982}};
r//MatrixFormv2 = {0.618678, 0.213605};
v3 = {0.804978, 0.587651, 0.2951};
{v2//MatrixForm, v3//MatrixForm}v2.r逆順で乗算すると互換性がない形状のためにエラーメッセージが出る:
r.v2r.v3v2.r.v3m = {{1, 2}, {3, 4}};
v = {5, 6};m . vv.mv.m.vc = {{5}, {6}};
r = {{5, 6}};m,c,rを含む積はmとvを含む積と同じ項を含むが,すべてが行列である:
r.mm.cr.m.cさらに,積は行列の形状を尊重する順で行われなければならない:
c.m.rm = {{.5, .32}, {.19, .73}};
u = {1.5, .27};
v = {-3.2, 5.5};m.u.v{v.m.u, u.m.v}SparseArray[{{1, 1} -> 5, {10, 10} -> 10}].SparseArray[{{10} -> 7}]MatrixForm[{%}]SparseArray[{{1, 1} -> 5, {10, 10} -> 10}].{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}mat = SymmetrizedArray[{{1, 1} -> 2, {1, 2} -> 3, {2, 2} -> 5}, {2, 2}, Symmetric[{1, 2}]]mat.{7, 11}mat.SparseArray[{1, 2}]構造化ベクトルを持つ正規行列の積はベクトルの構造を持つことがある:
{{2, 3}, {3, 5}}.QuantityArray[{a, b}, "Meters"]行列と行列の乗算 (11)
m = {{1.2, 3.2, 5.2}, {2.2, 4.2, -6.4}, {3.1, 5.1, 7.3}};
n = {{4.2, 6.3, 8.2}, {2.5, -7.3, 9.3}, {6.3, 8.3, -1.10}};
m.n // MatrixFormm = {{1 + I, 2, 3 - 2 I}, {0, 4, 5I}, {0, 0, 6}};
n = {{6 + I, 4, 5 - 7 I}, {5, 3, 2I}, {5, 2, 7}};
m.n // MatrixFormm = {{1, 2}, {3, 4}, {5, 6}};
n = {{6, 5, 4}, {3, 2, 1}};
m.n // MatrixFormn.m // MatrixForm{MatrixPlot[m], MatrixPlot[n], MatrixPlot[m.n], MatrixPlot[n.m]}m = RandomReal[1, {4, 3}, WorkingPrecision -> 20];
n = RandomReal[1, {3, 2}, WorkingPrecision -> 20];
m.n//MatrixFormn.m
{{a, b}, {c, d}} . {{r, s}, {t, u}}ℱ = FiniteField[29, 4];
m = {{ℱ[12], ℱ[23], ℱ[34]}, {ℱ[45], ℱ[56], ℱ[67]}, {ℱ[78], ℱ[89], ℱ[90]}};
n = {{ℱ[123], ℱ[234]}, {ℱ[345], ℱ[456]}, {ℱ[567], ℱ[678]}};
m.n // MatrixFormCenteredInterval行列の積:
m = Map[CenteredInterval, RandomReal[{-10, 10}, {3, 3}, WorkingPrecision -> 10], {2}];
n = Map[CenteredInterval, RandomReal[{-10, 10}, {3, 2}, WorkingPrecision -> 10], {2}];
(mn = m.n)//MatrixFormm と n のランダムな代表である mrep と nrep を求める:
ranrep[e_CenteredInterval] := e["Center"] + RandomInteger[{-1000, 1000}] / 1000 e["Radius"]
(mrep = Map[ranrep, m, {2}])//MatrixForm(nrep = Map[ranrep, n, {2}])//MatrixFormmn に mrep と nrep の積が含まれることを確認する:
MapThread[IntervalMemberQ, {mn, mrep.nrep}, 2]//MatrixFormDot[SparseArray[Automatic, {2, 3}, 0, {1, {{0, 1, 2}, {{3}, {2}}}, {3, 11}}], SparseArray[Automatic, {3, 3}, 0, {1, {{0, 0, 1, 2}, {{3}, {1}}}, {2, 9}}]]%//MatrixFormDot[SymmetrizedArray[StructuredArray`StructuredData[{3, 3}, {{{1, 1} -> 2, {2, 3} -> 35/2},
Symmetric[{1, 2}]}]], SymmetrizedArray[StructuredArray`StructuredData[{3, 3}, {{{1, 1} -> 8, {2, 3} -> 10},
Symmetric[{1, 2}]}]]]%//MatrixFormm = {{a, 1}, {0, b}};m.m.m//MatrixFormMatrixPowerと比較する:
MatrixPower[m, 3]//MatrixFormDotをApply (@@)およびConstantArrayと組み合せて行列を10乗する:
Dot @@ ConstantArray[m, {10}]//ExpandMatrixPower[m, 10]//Expandmat = RandomReal[{0, 9}, {1000, 1000}];
mat2 = RandomComplex[1 + I, {1000, 300}];
Dot[mat, mat2];//AbsoluteTiming高階配列 (5)
Dotは任意の階数の配列に使うことができる:
a = RandomInteger[9, {2, 3, 4}];
b = RandomInteger[9, {4, 5, 2}];
c = RandomInteger[9, {2}];a.bDimensions[%]積が共通の次元で行われている限り,任意の組合せを使うことができる:
c.a.b.c(a = {{{8, 0}, {4, 2}}, {{0, 7}, {5, 6}}})//MatrixFormx = {1, 2};
y = {(1/2), (1/3)};
z = {-1, 1};
は,
を
の最後のレベルと,
を最初のレベルとペアにする完全な縮約
である:
a.x.y.z
は,
を
の最初のレベルと,
を最後のレベルとペアにする別の縮約
である:
a.z.y.xmの両方のレベルをaの2番目と3番目のレベルでそれぞれ縮約する:
a = RandomReal[1, {2, 3, 4}];
m = RandomReal[1, {3, 4}];
Flatten[m].Flatten[a, {2, 3}]2つの疎な配列のDotは,一般に,別の疎な配列である:
a = SparseArray[Automatic, {2, 2, 3, 4}, 0, {1, {{0, 2, 2}, {{2, 3, 4}, {1, 1, 1}}}, {x, y}}];m = SparseArray[Automatic, {4, 10}, 0, {1, {{0, 1, 1, 1, 2}, {{1}, {5}}}, {3, 2}}];a.m疎な配列と通常のリストのDotは,別の疎な配列または通常のリストかもしれない:
a.{1, 2, 3, 4}a.{{1}, {2}, {3}, {4}}%//MatrixForm2つのSymmetrizedArrayオブジェクトの積は,一般に,別の対称化された配列である:
s = SymmetrizedArray[StructuredArray`StructuredData[{4, 4, 4, 4},
{{{1, 2, 3, 4} -> 1}, Symmetric[{1, 2, 3, 4}]}]];
m = SymmetrizedArray[StructuredArray`StructuredData[{4, 4}, {{{1, 2} -> 3}, Antisymmetric[{1, 2}]}]];
s.m新たな配列の対称性は入力の対称性よりもはるかに複雑かもしれない:
a = SymmetrizedArray[StructuredArray`StructuredData[{4, 4, 4},
{{{1, 2, 3} -> 2}, Antisymmetric[{1, 2, 3}]}]];
s.aTensorSymmetry[%]アプリケーション (16)
写像と基底 (6)
v = {-1, 3};l = {1, 1};
p = (v.l/l.l)lGraphics[{InfiniteLine[{0, 0}, l], Arrow[{{0, 0}, v}], {Directive[StandardRed, Thick], Arrow[{{0, 0}, p}]}, {Dotted, Arrow[{p, v}]}}, PlotRangePadding -> .5, Axes -> True]v = {1, 2, 1 / 2};
b1 = {2, 4, -2};
b2 = {-3, 3, 0};b3 = b2 - (b2.b1/b1.b1)b1p = (v.b1/b1.b1)b1 + (v.b3/b3.b3)b3v - p% == (v.(b1⨯b2)/(b1⨯b2).(b1⨯b2))(b1⨯b2)Graphics3D[{FaceForm[Opacity[.25]], InfinitePlane[{0, 0, 0}, {b1, b2}], Arrow[{{0, 0, 0}, v}], {Directive[StandardMagenta, Thick], Arrow[{{0, 0, 0}, p}]}, Directive[Thick, Dotted], Arrow[{p, v}]}, PlotRangePadding -> 1, Axes -> True]Gram–Schmidt過程を適用して以下のベクトルから正規直交基底を構築する:
{Subscript[v, 1], Subscript[v, 2], Subscript[v, 3], Subscript[v, 4]} = {{-0.449, -0.028, -0.209, 0.376}, {0.547, -0.943, 0.141, -0.522}, {0.405, -0.078, -0.511, 0.532}, {-0.358, -0.452, 0.651, -0.13}};正規直交基底の最初のベクトル
は単に正規化された倍数
である:
Subscript[e, 1] = Normalize[Subscript[v, 1]]続くベクトルについては,前の基底ベクトルと平行な成分が正規化の前に引かれる:
Subscript[e, 2] = Normalize[Subscript[v, 2] - Subscript[v, 2].Subscript[e, 1]Subscript[e, 1]]Subscript[e, 3] = Normalize[Subscript[v, 3] - Subscript[v, 3].Subscript[e, 1]Subscript[e, 1] - Subscript[v, 3].Subscript[e, 2]Subscript[e, 2]]Subscript[e, 4] = Normalize[Subscript[v, 4] - Subscript[v, 4].Subscript[e, 1]Subscript[e, 1] - Subscript[v, 4].Subscript[e, 2]Subscript[e, 2] - Subscript[v, 4].Subscript[e, 3]Subscript[e, 3]]Orthogonalizeを使って答を確かめる:
{Subscript[e, 1], Subscript[e, 2], Subscript[e, 3], Subscript[e, 4]} == Orthogonalize[{Subscript[v, 1], Subscript[v, 2], Subscript[v, 3], Subscript[v, 4]}]Subscript[e, 1] = {1, 1, 0, 0} / Sqrt[2];
Subscript[e, 2] = {1, -1, 0, 0} / Sqrt[2];
Subscript[e, 3] = {0, 0, 1, -1} / Sqrt[2];
Subscript[e, 4] = {0, 0, 1, 1} / Sqrt[2];Table[Subscript[e, i].Subscript[e, j], {i, 4}, {j, 4}]//MatrixFormv = {w, x, y, z};{Subscript[c, 1], Subscript[c, 2], Subscript[c, 3], Subscript[c, 4]} = Table[v.Subscript[e, j], {j, 4}]v == Sum[Subscript[c, j] Subscript[e, j], {j, 4}]//Simplify{Subscript[b, 1], Subscript[b, 2], Subscript[b, 3], Subscript[b, 4], Subscript[b, 5]} = {{0, 1, 4, -2, -5}, {-4, -1, 0, 3, -5}, {-3, -3, 0, 4, -4}, {0, -4, -2, -3, 3}, {1, -2, -1, 3, 1}};ベクトルによって形成された行列が非零の行列式を持つことを示すことで,これが基底であることを確認する:
Det[{Subscript[b, 1], Subscript[b, 2], Subscript[b, 3], Subscript[b, 4], Subscript[b, 5]}]c = Inverse[Transpose[{Subscript[b, 1], Subscript[b, 2], Subscript[b, 3], Subscript[b, 4], Subscript[b, 5]}]]{Subscript[y, 1], Subscript[y, 2], Subscript[y, 3], Subscript[y, 4], Subscript[y, 5]} = c.{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3], Subscript[x, 4], Subscript[x, 5]}Sum[Subscript[y, i]Subscript[b, i], {i, 5}]//SimplifyFrenet–Serretの系は,ベクトル基底とスカラー関数におけるすべての空間曲線の特性を符号化する.以下の曲線について考える:
c[t_] := {Cos[t], Sin[t], (t/2π)}平行投影を減算することで,最初の3つの導関数から正規直交基底を構築する:
{Subscript[e, 1], Subscript[e, 2], Subscript[e, 3]} = Table[Normalize[Derivative[j][c][t] - Underoverscript[∑, k = 1, j - 1](Derivative[j][c][t].Derivative[k][c][t]/Derivative[k][c][t].Derivative[k][c][t])Derivative[k][c][t]], {j, 3}]~Simplify~(t∈Reals)Subscript[e, 3] = Simplify[Det[{Subscript[e, 1], Subscript[e, 2], Subscript[e, 3]}]]Subscript[e, 3];{κ, τ} = {(D[Subscript[e, 1], t].Subscript[e, 2]/Sqrt[c'[t].c'[t]]), -(D[Subscript[e, 3], t].Subscript[e, 2]/Sqrt[c'[t].c'[t]])}//SimplifyFrenetSerretSystemを使って答を確認する:
Simplify[{{κ, τ}, {Subscript[e, 1], Subscript[e, 2], Subscript[e, 3]}} == FrenetSerretSystem[c[t], t], t∈Reals]曲線とフレームとも呼ばれる関連付けられた移動基底を可視化する:
DynamicModule[{s}, Labeled[Show[ParametricPlot3D[c[t], {t, 0, 6π}, PlotRangePadding -> {.5, .5, .9}], Graphics3D[{StandardBlue, Arrow[{c[t], c[t] + Subscript[e, 1]}], StandardRed, Arrow[{c[t], c[t] + Subscript[e, 2]}], StandardPurple, Arrow[{c[t], c[t] + Subscript[e, 3]}]}] /. t -> Dynamic[s]], Animator[Dynamic[s], {0, 6π}], Top]]行列と線形演算子 (6)
r = RotationMatrix[θ, {1, 1, 1}]r.Transpose[r]//SimplifyOrthogonalMatrixQを使って確認する:
OrthogonalMatrixQ[r]行列は
のユニタリ行列である.Pauli行列がユニタリ行列であることを示す:
p = PauliMatrix[2]p.ConjugateTranspose[p]UnitaryMatrixQで確認する:
UnitaryMatrixQ[p]
であれば行列は正規行列である.次の行列が正規行列であることを示す:
m = {{1, 2, -1}, {-1, 1, 2}, {2, -1, 1}};
MatrixForm /@ {m.Transpose[m], Transpose[m].m}NormalMatrixQを使って確認する:
NormalMatrixQ[m]正規行列はその他の多くのタイプの行列を特殊ケースとして含む.ユニタリ行列は正規行列である:
p = {{0, -I}, {I, 0}};
p . ConjugateTranspose[p] == ConjugateTranspose[p].p == {{1, 0}, {0, 1}}
であるエルミート(Hermite)行列(自己随伴行列とも呼ばれる)もまた,行列
が示すように,正規行列である:
p == ConjugateTranspose[p]しかし,行列
はユニタリ行列やエルミート行列のように名前が付いた正規行列ではない:
{UnitaryMatrixQ[m], HermitianMatrixQ[m]}量子力学では,有限個の状態を持つ系は単位ベクトルで,物理量はそれに作用する行列で表される.電子のようなスピン1/2の粒子について考える.この状態は以下のようなものかもしれない:
s = {(1/Sqrt[5]), (2I/Sqrt[5])};jz = (ℏ/2)PauliMatrix[3]Conjugate[s].jz.sσz = Simplify[Sqrt[Conjugate[s].jz.jz.s - (Conjugate[s].jz.s)^2], ℏ > 0]jy = (ℏ/2)PauliMatrix[2]σy = Simplify[Sqrt[Conjugate[s].jy.jy.s - (Conjugate[s].jy.s)^2], ℏ > 0]Simplify[σy σz > (ℏ/2)Abs[ Conjugate[s].(jy.jz - jz.jy).s] , ℏ > 0]n = 10;
u = Array[Subscript[x, #]&, n];
l = ListConvolve[{1, -2, 1} n ^ 2, u, {2, 2}]{c, m} = N[CoefficientArrays[%, u]]v = Sin[2. Pi Range[n] / n];ListConvolve[{1, -2, 1} n ^ 2, v, {2, 2}]l /. Thread[u -> v]m.vDotで
を使う方が速い:
trials = 10000;
Map[First, {AbsoluteTiming[Do[ListConvolve[{1, -2, 1} n ^ 2, v, {2, 2}], {trials}]],
AbsoluteTiming[Do[l /. Thread[u -> v], {trials}]], AbsoluteTiming[Do[m.v, {trials}]]}]m = RandomReal[1, {3, 3}];vs = RandomReal[1, {10^6, 3}];Map[m.#&, vs] == vs.Transpose[m]vs.Transpose[m];//AbsoluteTimingMap[m.#&, vs];//AbsoluteTiming行列と対称性がある配列 (4)
s = {{12, 7, 13}, {7, 10, -8}, {13, -8, 4}};
s//MatrixFormq[v_] := v.s.vq[α{x, y, z}] == α ^2q[{x, y, z}]//Simplifyq[{x, y, z}]//ExpandFunctionRange[%, {x, y, z}, q]DensityPlot3D[q[{x, y, z}], {x, y, z}∈Cuboid[5{-1, -1, -1}, 5{1, 1, 1}]](g = {{7, 2, 0}, {2, 6, -2}, {0, -2, 5}})//MatrixForm〈u_, v_〉 := u.g.v正定値であることは関連付けられた二次形式
が
について正であることを意味する:
FunctionSign[{〈{x, y, z}, {x, y, z}〉, {x, y, z} != {0, 0, 0}}, {x, y, z}, StrictInequalities -> True]Dot自体が恒等行列に関連付けられた内積である点に注意のこと:
{u, v, w}.{x, y, z} == {u, v, w}.IdentityMatrix[3].{x, y, z}Gram–Schmidt過程を標準基底に適用して正規直交基底を得る:
{Subscript[b, 1], Subscript[b, 2], Subscript[b, 3]} = IdentityMatrix[3];
Do[ Subscript[e, j] = Subscript[b, j] - Underoverscript[∑, k = 1, j - 1]〈Subscript[b, j], Subscript[e, k]〉Subscript[e, k]; Subscript[e, j] = (Subscript[e, j]/Sqrt[〈Subscript[e, j], Subscript[e, j]〉]), {j, 3}];
{Subscript[e, 1], Subscript[e, 2], Subscript[e, 3]}Table[〈Subscript[e, i], Subscript[e, j]〉, {i, 3}, {j, 3}]//Simplify(Ω = {{0, 0, -1, 0}, {0, 0, 0, -1}, {1, 0, 0, 0}, {0, 1, 0, 0}})//MatrixFormω[u_, v_] := u.Ω.v{AntisymmetricMatrixQ[Ω], Ω.Ω == -IdentityMatrix[4]}ω[{q1, q2, p1, p2}, {q1, q2, p1, p2}]しかし,この形式は非縮退である.つまり,
は
ということになる:
Solve[Subscript[∀, {q3, q4, p3, p4}]ω[{q1, q2, p1, p2}, {q3, q4, p3, p4}] == 0, {q1, q2, p1, p2}]{a, b, c, d, e, f} = RandomReal[1, {6, 6}]LeviCivitaTensorを使って完全に反対称な配列を六次元で構築する:
ϵ = LeviCivitaTensor[6, SymmetrizedArray]ϵ.f.e.d.c.b.aDet[{a, b, c, d, e, f}]Block[{n = 6}, (-1)^(n(n + 1)/2)ϵ.a.b.c.d.e.f]特性と関係 (16)
Dotの各引数は線形である:
Subscript[u, 1] = {Subscript[x, 1], Subscript[y, 1], Subscript[z, 1]};
Subscript[u, 2] = {Subscript[x, 2], Subscript[y, 2], Subscript[z, 2]};
Subscript[u, 3] = {Subscript[x, 3], Subscript[y, 3], Subscript[z, 3]};Expand[Dot[a Subscript[u, 1] + Subscript[u, 3], Subscript[u, 2]] == a Dot[Subscript[u, 1], Subscript[u, 2]] + Dot[Subscript[u, 3], Subscript[u, 2]]]Expand[Dot[Subscript[u, 1], b Subscript[u, 2] + Subscript[u, 3]] == b Dot[Subscript[u, 1], Subscript[u, 2]] + Dot[Subscript[u, 1], Subscript[u, 3]]]実数項を持つベクトル
について,Norm[v]は
に等しい:
vr = RandomReal[1, {3}]Norm[vr] == Sqrt[vr.vr]vc = RandomComplex[1 + I, {3}]Norm[vc] == Sqrt[vc.Conjugate[vc]] == Sqrt[Conjugate[vc].vc]実数項を持つ2つのベクトルについて
,ただし,
は
と
の間の角である:
{u1, u2} = RandomReal[1, {2, 5}]u1.u2 == Norm[u1]Norm[u2]Cos[VectorAngle[u1, u2]]{u, v} = RandomReal[1, {2, 3}];
rt = RotationTransform[RandomReal[{0, 2Pi}], RandomReal[{-1, 1}, 3]];
u.v == rt[u].rt[v]2つの行列について,
の
番目と ![]()
番目の項は
の
番目の行と
の ![]()
番目の列のドット積である:
m = Array[x, {3, 4}];
n = Array[y, {4, 5}];
m.n == Table[m[[i, All]].n[[All, j]], {i, 3}, {j, 5}]m = RandomInteger[{-10, 10}, {3, 3}];
n = RandomInteger[{-10, 10}, {3, 3}];
m.n == n.mMatrixPowerを使って繰返し行列の積を計算する:
a = {{1, 1, 0}, {0, 1, 1}, {0, 0, 1}};b = MatrixPower[a, 4]b == Dot[a, a, a, a]ベクトルに対するbの動作はそのベクトルにaで4回動作することに等しい:
b.{v1, v2, v3} == Nest[x a.x, {v1, v2, v3}, 4]t = RandomInteger[9, {2, 3, 4}];
u = RandomInteger[9, {4, 5}];
t.u == Table[Sum[t[[i1, i2, k]] u[[k, j2]], {k, 4}], {i1, 2}, {i2, 3}, {j2, 5}]Dotを
階と
階のテンソルに適用すると
階のテンソルが与えられる:
a = RandomInteger[9, {2, 3, 4}];
b = RandomInteger[9, {4, 5}];TensorRank[a.b] == TensorRank[a] + TensorRank[b] - 2Inner[Times, {a, b, c}, {x, y, z}, Plus]Dot[{a, b, c}, {x, y, z}]Dotは配列の標準内積を実装する:
{{a, b}, {c, d}}.{{w, x}, {y, z}}Timesを使って要素ごとの乗算を行う:
{{a, b}, {c, d}} * {{w, x}, {y, z}}DotはTensorProductとTensorContractの組合せとして実装できる:
v = Array[x, {3}];
a = Array[y, {3, 4, 5}];
m = Array[z, {5, 6}];v.a.m == TensorContract[vam, {{1, 2}, {4, 5}}]//SimplifyDotをFlattenと組み合せて使ってある配列の複数のレベルを別の配列の複数のレベルで縮約する:
a = Array[x, {3, 4, 5}];
b = Array[y, {3, 4, 5}];TensorContract[ab, {{2, 5}, {3, 6}}] == Flatten[a, {{1}, {2, 3}}].Flatten[b, {{2, 3}, {1}}]TensorReduceはDotを含む式が簡約できる:
TensorReduce[v.m.v, Assumptions -> {m∈Matrices[{n, n}, Antisymmetric[{1, 2}]], v∈Vectors[n]}]u = {1, 2, 3};
v = {x, y, z};
Outer[Times, u, v]c = List /@ ur = {v}c.r行行列と列行列のDotは対応するベクトルのKroneckerProductに等しい:
u = {{1}, {2}, {3}};
v = {{4, 5, 6}};
u.v == KroneckerProduct[Flatten[u], Flatten[v]]考えられる問題 (2)
Dotは右側から乗算されたベクトルを実質的に列ベクトルとして扱う:
a = {{1, 2}, {3, 4}, {5, 6}};a.{1, 1}a.{{1}, {1}}Dotは,実質的に,左側から乗算されたベクトルを行ベクトルとして扱う:
{1, 1, 1}.a{{1, 1, 1}}.aDotは
についての標準的な内積は与えない:
a = {1 + I, 2 - I, -1 - 2I};a.a1つの引数にConjugateを使ってエルミート内積を得る:
Conjugate[a].aNorm[a] ^ 2テクニカルノート
-
▪
- ベクトルと行列 ▪
- ベクトルおよび行列の積
関連するガイド
-
▪
- 行列の操作 ▪
- GPU計算 ▪
- テンソル ▪
- ベクトル操作 ▪
- 行列と線形代数 ▪
- 記号的なベクトル,行列,配列 ▪
- 有限数学 ▪
- NVIDIAを使ったGPU計算 ▪
- リストへの数学的およびカウント操作 ▪
- 有限体 ▪
- 構造化配列 ▪
- グラフプログラミング
履歴
1988 で導入 (1.0) | 2003 で更新 (5.0) ▪ 2012 (9.0) ▪ 2024 (14.0)
テキスト
Wolfram Research (1988), Dot, Wolfram言語関数, https://reference.wolfram.com/language/ref/Dot.html (2024年に更新).
CMS
Wolfram Language. 1988. "Dot." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/Dot.html.
APA
Wolfram Language. (1988). Dot. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Dot.html
BibTeX
@misc{reference.wolfram_2026_dot, author="Wolfram Research", title="{Dot}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/Dot.html}", note=[Accessed: 16-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_dot, organization={Wolfram Research}, title={Dot}, year={2024}, url={https://reference.wolfram.com/language/ref/Dot.html}, note=[Accessed: 16-September-2026]}