KroneckerProduct[m1,m2,…]
配列 miのクロネッカー(Kronecker)積を構築する.
KroneckerProduct
KroneckerProduct[m1,m2,…]
配列 miのクロネッカー(Kronecker)積を構築する.
詳細
- KroneckerProductは,ベクトル,行列,あるいは一般に任意の深さの完全配列に使うことができる.
- 行列の場合,KroneckerProductは行列の直積を与える.
- KroneckerProductはSparseArrayオブジェクトに使うこともできる.その場合は,可能であればSparseArrayオブジェクトを返す. »
例題
すべて開く すべて閉じる例 (2)
av = Array[Subscript[a, ##]&, {2}];
bv = Array[Subscript[b, ##]&, {2}];KroneckerProduct[av, bv]//MatrixFormam = Array[Subscript[a, ##]&, {2, 2}];
bm = Array[Subscript[b, ##]&, {2, 2}];KroneckerProduct[am, bm]//MatrixFormスコープ (2)
a = {{0, 1}, {-1, 0}};
b = {{1, 2}, {3, 4}};MatrixForm[KroneckerProduct[a, b]]MatrixForm[KroneckerProduct[N[a], N[b]]]MatrixForm[KroneckerProduct[N[a, 20], N[b, 20]]]s = SparseArray[{i_, i_} -> i, {3, 3}];
t = SparseArray[{{i_, j_} /; Abs[i - j] == 1 -> i - j}, {4, 4}];KroneckerProduct[s, t]MatrixForm[%]アプリケーション (5)
平坦化(ベクトル化)関係Flatten[a.x.b]=(ab).Flatten[x]を使うことで,一般的な線形行列方程式 a1.x.b1+⋯+am.x.bm=c を行列
について解く:
{Subscript[a, 1], Subscript[a, 2], Subscript[b, 1], Subscript[b, 2], c} = RandomReal[1, {5, 2, 2}];x = Partition[LinearSolve[KroneckerProduct[Subscript[a, 1], Subscript[b, 1]] + KroneckerProduct[Subscript[a, 2], Subscript[b, 2]], Flatten[c]], 2]Subscript[a, 1].x.Subscript[b, 1] + Subscript[a, 2].x.Subscript[b, 2] - c//ChopvecPermutationMatrix[p_, q_] := PermutationMatrix[Flatten[Partition[Range[p q], p], {{2, 1}}]]p = 5;q = 3;
ArrayPlot[vecPermutationMatrix[p, q]]vec置換行列は,単位ベクトルを持つ恒等行列のクロネッカー積の和として表すことができる:
vecPermutationMatrix[p, q] == Underoverscript[∑, k = 1, p]KroneckerProduct[UnitVector[p, k], IdentityMatrix[q], UnitVector[p, k]]p = 6;q = 5;
MatrixForm[m1 = Array[, {p, q}]]r = 4;s = 3;
MatrixForm[m2 = Array[, {r, s}]]vec置換行列を使って与えられた2つの行列のクロネッカー積と同じ行列の逆順のクロネッカー積の関係が表現できる:
KroneckerProduct[m1, m2].vecPermutationMatrix[q, s] == vecPermutationMatrix[p, r].KroneckerProduct[m2, m1]n = 4;
s = SparseArray[{Band[{2, 1}] -> 1, Band[{1, 1}] -> -2, Band[{1, 2}] -> 1}, {n, n}]s.Array[Subscript[u, #]&, n]sid = IdentityMatrix[n, SparseArray, WorkingPrecision -> MachinePrecision]MatrixForm[v = Array[Subscript[u, ##]&, {n, n}]]m1 = KroneckerProduct[s, sid]Partition[m1.Flatten[v], n][[2 ;; -2, 2 ;; -2]]//MatrixFormラプラシアン(微分行列とそれ自体のクロネッカー和)を近似する行列:
lap = KroneckerProduct[s, sid] + KroneckerProduct[sid, s]Partition[lap.Flatten[v], n][[2 ;; -2, 2 ;; -2]]//MatrixFormSubscript[b, n_] := Module[{h = Quotient[n, 2], id, w},
id = IdentityMatrix[h];
w = DiagonalMatrix[Exp[-π I Range[0, h - 1] / h]];
ArrayFlatten[{{id, w}, {id, -w}}]
]2のベキ乗についての n の n×n の「ビット逆転」置換行列を定義する:
Subscript[p, n_] := PermutationMatrix[IntegerReverse[Range[0, n - 1], 2, BitLength[n] - 1] + 1]Subscript[i, n_] := IdentityMatrix[n];a_⊗b_ := KroneckerProduct[a, b]Cooley-Tukey因数分解からの長さ16の離散フーリエ変換行列を形成する:
Subscript[f, 16] = Subscript[b, 16].(Subscript[i, 2]⊗ Subscript[b, 8]).(Subscript[i, 4]⊗ Subscript[b, 4]).(Subscript[i, 8]⊗ Subscript[b, 2]).Subscript[p, 16];これはFourierMatrixの結果と同じである:
Subscript[f, 16] == FourierMatrix[16, FourierParameters -> {1, -1}]r = RandomReal[1, 16]N[Subscript[f, 16].r]Fourierは特定のベクトルについて効果的に因数分解を行うので高速である:
Fourier[r, FourierParameters -> {1, -1}]KroneckerSum[a_ ? SquareMatrixQ, b_ ? SquareMatrixQ] :=
KroneckerProduct[a, IdentityMatrix[Length[b], If[SparseArrayQ[a], SparseArray, List]]] +
KroneckerProduct[IdentityMatrix[Length[a], If[SparseArrayQ[b], SparseArray, List]], b]am = Array[Subscript[a, ##]&, {2, 2}];bm = Array[Subscript[b, ##]&, {2, 2}];KroneckerSum[am, bm]//MatrixForm恒等式MatrixExp[a⊕b]=MatrixExp[a]⊗MatrixExp[b]を確かめる:
{a, b} = RandomReal[1, {2, 3, 3}];MatrixExp[KroneckerSum[a, b]] == KroneckerProduct[MatrixExp[a], MatrixExp[b]]Eigenvalues[a⊕b]={λi+μj|λi∈Eigenvalues[a],μj∈Eigenvalues[b]}を確かめる:
λa = Eigenvalues[a];
λb = Eigenvalues[b];
λab = Eigenvalues[KroneckerSum[a, b]];Sort[λab] == Sort[Flatten@Outer[Plus, λa, λb]]特性と関係 (11)
KroneckerProductは多重線形(各引数について線形)の
である:
{a, b, c} = RandomInteger[5, {3, 2, 4}];
{λ, μ} = {3, 4};KroneckerProduct[λ a + μ b, c] ==
λ KroneckerProduct[a, c] + μ KroneckerProduct[b, c]KroneckerProduct[a, λ b + μ c] ==
λ KroneckerProduct[a, b] + μ KroneckerProduct[a, c]KroneckerProduct[KroneckerProduct[a, b], c] ==
KroneckerProduct[a, KroneckerProduct[b, c]]KroneckerProduct[a, b] == KroneckerProduct[b, a]KroneckerProductは混合積特性
を満たす:
{a, b, c, d} = RandomInteger[5, {4, 3, 3}];KroneckerProduct[a, b].KroneckerProduct[c, d] ==
KroneckerProduct[a.c, b.d]Transposeによる分配
:
KroneckerProduct[a, b] == KroneckerProduct[a, b]ConjugateTransposeによる分配
:
KroneckerProduct[a, b] == KroneckerProduct[a, b]Inverseによる分配
(
と
が可逆である場合かつその場合にのみ):
a = {{1, 2}, {0, 1}}; b = {{2, 1}, {0, 3}};Inverse[KroneckerProduct[a, b]] == KroneckerProduct[Inverse[a], Inverse[b]]PseudoInverseによる分配PseudoInverse[ab]=PseudoInverse[a]PseudoInverse[b]:
a = {{1, 2}, {0, 0}}; b = {{0, 1}, {0, 3}};PseudoInverse[KroneckerProduct[a, b]] == KroneckerProduct[PseudoInverse[a], PseudoInverse[b]]クロネッカー積のトレースTrはTr[ab]=Tr[a]Tr[b]を満たす:
a = RandomInteger[10, {3, 3}];b = RandomInteger[10, {4, 4}];Tr[KroneckerProduct[a, b]] == Tr[a]Tr[b]行列式Detは
を満たす.ただし,a∈Matrices[{m,m}]かつ b∈Matrices[{n,n}]である:
Det[KroneckerProduct[a, b]] == Det[a]^4Det[b]^3EigenvaluesはEigenvalues[ab]={λiμj|λi∈Eigenvalues[a],μj∈Eigenvalues[b]}を満足する:
a = RandomReal[1, {3, 3}];b = RandomReal[1, {4, 4}];λa = Eigenvalues[a];
λb = Eigenvalues[b];
λab = Eigenvalues[KroneckerProduct[a, b]];Sort[λab] == Sort[Flatten@Outer[Times, λa, λb]]SingularValueListは同じ関係を満たす:
σa = SingularValueList[a];
σb = SingularValueList[b];
σab = SingularValueList[KroneckerProduct[a, b]];Sort[σab] == Sort[Flatten@Outer[Times, σa, σb]]MatrixRankはMatrixRank[ab]=MatrixRank[a]MatrixRank[b]を満たす:
MatrixRank[KroneckerProduct[a, b]] == MatrixRank[a]MatrixRank[b]行列についてのKroneckerProductはブロックが
の平坦化されたブロック行列である:
am = {{1, 2}, {3, 4}};bm = {{5, 6}, {7, 8}, {9, 10}};KroneckerProduct[am, bm] ==
ArrayFlatten@Table[am[[i, j]] * bm, {i, 2}, {j, 2}]ベクトルのKroneckerProductは対応する列行列のDotに関連している:
av = {1, 2, 3}; bv = {4, 5};
am = {av}; bm = {bv};KroneckerProduct[av, bv] == am.bmベクトルのKroneckerProductはTensorProductと等価である:
av = {1, 2, 3}; bv = {4, 5};KroneckerProduct[av, bv] == TensorProduct[av, bv]am = {{1, 2}, {3, 4}};bm = {{5, 6}, {7, 8}, {9, 10}};KroneckerProduct[am, bm] == ArrayFlatten[TensorProduct[am, bm]]ベクトルのKroneckerProductはOuterの特殊ケースである:
av = {1, 2, 3}; bv = {4, 5};KroneckerProduct[av, bv] == Outer[Times, av, bv]am = {{1, 2}, {3, 4}};bm = {{5, 6}, {7, 8}, {9, 10}};KroneckerProduct[am, bm] == ArrayFlatten[Outer[Times, am, bm]]対角行列と一般行列のクロネッカー積はブロック対角行列である:
dm = DiagonalMatrix[Array[Subscript[d, #]&, 2]];
bm = Array[Subscript[b, ##]&, {2, 2}];BlockDiagonalMatrix[KroneckerProduct[dm, bm]]MatrixForm[%]下三角行列と一般行列のクロネッカー積はブロック下三角行列である:
lm = LowerTriangularMatrix[LowerTriangularize[Array[Subscript[ℓ, #]&, {2, 2}]]];
bm = Array[Subscript[b, ##]&, {2, 2}];KroneckerProduct[lm, bm]MatrixForm[%]上三角行列と一般行列のクロネッカー積はブロック上三角行列である:
um = UpperTriangularMatrix[UpperTriangularize[Array[Subscript[u, #]&, {2, 2}]]];
bm = Array[Subscript[b, ##]&, {2, 2}];KroneckerProduct[um, bm]MatrixForm[%]関連項目
関連するガイド
-
▪
- 行列の操作 ▪
- ベクトル操作 ▪
- 記号的なベクトル,行列,配列
テキスト
Wolfram Research (2007), KroneckerProduct, Wolfram言語関数, https://reference.wolfram.com/language/ref/KroneckerProduct.html.
CMS
Wolfram Language. 2007. "KroneckerProduct." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/KroneckerProduct.html.
APA
Wolfram Language. (2007). KroneckerProduct. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/KroneckerProduct.html
BibTeX
@misc{reference.wolfram_2026_kroneckerproduct, author="Wolfram Research", title="{KroneckerProduct}", year="2007", howpublished="\url{https://reference.wolfram.com/language/ref/KroneckerProduct.html}", note=[Accessed: 01-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_kroneckerproduct, organization={Wolfram Research}, title={KroneckerProduct}, year={2007}, url={https://reference.wolfram.com/language/ref/KroneckerProduct.html}, note=[Accessed: 01-November-2026]}