DiagonalMatrix[list]
対角成分が list で与えられ,他の成分が0である行列を返す.
DiagonalMatrix[list,k]
k
次の対角上の list の要素の行列を返す.
DiagonalMatrix[list,k,n]
0で充填して n×n 行列を作る.
DiagonalMatrix
DiagonalMatrix[list]
対角成分が list で与えられ,他の成分が0である行列を返す.
DiagonalMatrix[list,k]
k
次の対角上の list の要素の行列を返す.
DiagonalMatrix[list,k,n]
0で充填して n×n 行列を作る.
詳細とオプション
- 対角行列を使って左から乗算することで行列の行をスケーリングしたり,右から乗算することで列をスケーリングしたりすることができる.
- DiagonalMatrix[{d1,…,dn}]で与えられる対角行列 の成分は
で与えられる.つまり,i
番目の主対角成分は
でその他の成分は0である. - DiagonalMatrix[list]は対称行列である.したがってその転置に等しい.
- k が正の場合,DiagonalMatrix[{d1,…,ds},k]は大きさが
の行列の成分を主対角の k 位置分上に,DiagonalMatrix[{d1,…,ds},-k]は,成分を主対角の k 位置分下に置く.k の値が異なると行列の大きさも異なる, - DiagonalMatrix[list]はDiagonalMatrix[list,0]に等しい.
- DiagonalMatrix[list,k,n]は,たとえそのために list 中の要素を取り除くことが必要だとしても,常に n×n 行列を作る. »
- 対角行列の行列式は,
のときは主対角成分の積で,それ以外のときは0である. - DiagonalMatrix[list,k,{m,n}]は m×n 行列を作る.
- DiagonalMatrix[SparseArray[…],…]はSparseArrayオブジェクトを返す.
- DiagonalMatrix[…,TargetStructure->struct]は対角行列を struct で指定された形式で返す.次は,その可能な設定である.
-
Automatic 返す際の表現を自動選択する "Dense" 行列を密な行列として表す "Sparse" 行列を疎な行列として表す "Structured" 行列を構造化配列として表す "Symmetric" 行列を対称行列として表す - DiagonalMatrix[…,TargetStructureAutomatic]の設定では,行列の成分数が設定された閾値未満の場合は密な行列が返され,それ以外の場合は構造化配列が返される.
- 対角行列は,構造化配列として返される場合は,効率的な格納とDet,Inverse,LinearSolve等のより効率的な操作を可能にする.
- 次は,DiagonalMatrixで加速される操作である.
-
Det 時間 
Dot 時間 
Inverse 時間 
LinearSolve 時間 
- 構造化されたDiagonalMatrix sa は,次の特性"prop"に sa["prop"]でアクセスできる.
-
"Diagonal" k
番目の対角上の成分のリスト"Offset" オフセット k "Properties" サポートされる特性のリスト "Structure" 構造化配列の型 "StructuredData" 構造化配列で保存されている内部データ "StructuredAlgorithms" 構造化配列に対して特別なメソッドを持つ関数のリスト "Summary" Datasetして表される要約情報 - Normal[DiagonalMatrix[…]]は対角行列を通常の行列として与える.
例題
すべて開く すべて閉じる例 (1)
スコープ (6)
DiagonalMatrix中の要素はベクトルの要素とマッチするように選ばれる:
v = 1 / Range[3];DiagonalMatrix[v]//MatrixFormDiagonalMatrix[N[v]]//MatrixFormDiagonalMatrix[N[v, 20]]//MatrixFormDiagonalMatrix[{1, 2, 3}, 0, 5] // MatrixFormDiagonalMatrix[{1, 2, 3, 4, 5}, 0, 3] // MatrixFormDiagonalMatrix[{1, 2, 3}, 0, {3, 5}] // MatrixFormDiagonalMatrix[{1, 2, 3}, 0, {5, 3}] // MatrixFormオプション設定TargetStructure"Sparse"を使って疎な対角行列を構築する:
𝒟 = DiagonalMatrix[RandomReal[1, 1000], TargetStructure -> "Sparse"]疎な表現を使うと大きい行列の場合はメモリが大幅に節約できる:
{ByteCount[𝒟], ByteCount[Normal[𝒟]]}オプション設定TargetStructure"Structured"を使って構造化直交行列を構築する:
𝒟 = DiagonalMatrix[RandomReal[{1, 2}, 1000], TargetStructure -> "Structured"]𝒟//ByteCountDet[𝒟]//AbsoluteTimingInverse[𝒟]//ByteCount//AbsoluteTiming(dnormal = Normal@𝒟)//ByteCount//AbsoluteTimingDet[dnormal]//AbsoluteTimingInverse[dnormal]//ByteCount//AbsoluteTimingDiagonalMatrixオブジェクトは配列についての情報を与える特性を含む:
dm = DiagonalMatrix[1 / Range[6], -2, TargetStructure -> "Structured"]dm["Properties"]dm["Diagonal"]"Offset"はオフセットを与える.これは,対角要素がそれぞれ主対角の上,その上,またはその下にある場合にそれぞれ0,正または負になる:
dm["Offset"]"Summary"特性は配列についての情報の簡単な要約を与える:
dm["Summary"]"StructuredAlgorithms"特性は構造化アルゴリズムを持つ関数のリストを与える:
dm["StructuredAlgorithms"]オプション (3)
TargetStructure (3)
DiagonalMatrix[{1, 2, 3}, TargetStructure -> "Dense"]DiagonalMatrix[{1, 2, 3}, TargetStructure -> "Structured"]DiagonalMatrix[{1, 2, 3}, TargetStructure -> "Sparse"]TargetStructureAutomaticの設定のとき,小さい次元では密な行列が返される:
DiagonalMatrix[Range[5], TargetStructure -> Automatic]DiagonalMatrix[Range[10000], TargetStructure -> Automatic]DiagonalMatrix[Range[10000], TargetStructure -> "Dense"] //ByteCountDiagonalMatrix[Range[10000], TargetStructure -> "Sparse"] //ByteCountDiagonalMatrix[Range[10000], TargetStructure -> "Structured"] //ByteCountアプリケーション (5)
MatrixForm[m = Array[Subscript[a, ##]&, {3, 3}]]md = DiagonalMatrix[Diagonal[m]];
mo = m - md;Map[MatrixForm, {md, mo}]m = N[HilbertMatrix[3]]{vals, vecs} = Eigensystem[m]Transpose[vecs].DiagonalMatrix[vals].vecsjordanMatrix[λ_, n_] := DiagonalMatrix[Table[λ, {n}]] + DiagonalMatrix[Table[1, {n - 1}], 1]jordanMatrix[λ, 3]//MatrixFormn = 5;
MatrixForm[DiagonalMatrix[Array[Subscript[a, #]&, n - 1], -1] + DiagonalMatrix[Array[Subscript[b, #]&, n]] + DiagonalMatrix[Array[Subscript[c, #]&, n - 1], 1]]この行列はBandを使って作ることもできる:
MatrixForm[SparseArray[{Band[{2, 1}] -> Array[Subscript[a, #]&, n - 1], Band[{1, 1}] -> Array[Subscript[b, #]&, n], Band[{1, 2}] -> Array[Subscript[c, #]&, n - 1]}]]m = (| | |
| - | - |
| a | 0 |
| 0 | b |
| 0 | 0 |);DiagonalMatrixQ[m]d = Diagonal[m]DiagonalMatrix[d, 0, {3, 2}] == m特性と関係 (9)
IdentityMatrixはDiagonalMatrixの特殊ケースである:
IdentityMatrix[5] == DiagonalMatrix[ConstantArray[1, 5]]IdentityMatrixを構造化DiagonalMatrixに変換する:
DiagonalMatrix[IdentityMatrix[5]]DiagonalMatrixはDiagonalMatrixQである行列を作る:
(m = DiagonalMatrix[{a, b, c, d}])//MatrixFormDiagonalMatrixQ[m]DiagonalMatrix[l]はUpperTriangularMatrixQおよびLowerTriangularMatrixQである:
DiagonalMatrix[{a, b, c, d}]UpperTriangularMatrixQ[%]LowerTriangularMatrixQ[%%]v = Range[5];Inverse,MatrixExp,MatrixPowerはDiagonalMatrixと交換できる:
Inverse[DiagonalMatrix[v]] == DiagonalMatrix[1 / v]MatrixExp[DiagonalMatrix[v]] == DiagonalMatrix[Exp[v]]MatrixPower[DiagonalMatrix[v], n] == DiagonalMatrix[Power[v, n]]Det[DiagonalMatrix[v]] == Times@@vTr[DiagonalMatrix[v]] == Plus@@v対角行列と一般行列の積の永久式は,一般行列に対角行列の対角成分を掛けたものの永久式に等しい:
n = 5;
diag = DiagonalMatrix[Array[, n]];
mat = Array[C, {n, n}];Permanent[diag.mat] == Apply[Times, Diagonal[diag]] * Permanent[mat]//SimplifyDiagonalMatrixの対角(Diagonal)はもとのベクトルを返す:
v = RandomReal[1, 100];Diagonal[DiagonalMatrix[v]] === vこれは,たとえベクトルがSparseArrayオブジェクトであってもそうである:
s = SparseArray[v];Diagonal[DiagonalMatrix[s]] === sMatrixPower[DiagonalMatrix[Range[4], -1], 5]MatrixPower[DiagonalMatrix[Range[4], 1], 5]DiagonalMatrix[list, k]で生成される行列のサイズはLength[list]+Abs[k]に等しい:
list = RandomReal[1, RandomInteger[{1, 10}]];
k = RandomInteger[{-20, 20}];Thread[Dimensions[DiagonalMatrix[list, k]] == Length[list] + Abs[k]]Bandを使ってDiagonalMatrix[list,k]と等価な対角が構築できる:
list = Range[5];
k = RandomInteger[{-2, 2}];DiagonalMatrix[list, k] == SparseArray[Band[If[k > 0, {1, 1 + k}, {1 - k, 1}]] -> list, (Length[list] + Abs[k]){1, 1}]TargetStructure"Sparse"と設定すると両者はSameQになる:
DiagonalMatrix[list, k, TargetStructure -> "Sparse"] === SparseArray[Band[If[k > 0, {1, 1 + k}, {1 - k, 1}]] -> list, (Length[list] + Abs[k]){1, 1}]関連するガイド
-
▪
- 行列の構成 ▪
- 構造化配列 ▪
- 行列と線形代数 ▪
- 行列分解 ▪
- 構造化行列とたたみ込みカーネル
履歴
1988 で導入 (1.0) | 2007 で更新 (6.0) ▪ 2008 (7.0) ▪ 2023 (13.3) ▪ 2024 (14.0)
テキスト
Wolfram Research (1988), DiagonalMatrix, Wolfram言語関数, https://reference.wolfram.com/language/ref/DiagonalMatrix.html (2024年に更新).
CMS
Wolfram Language. 1988. "DiagonalMatrix." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/DiagonalMatrix.html.
APA
Wolfram Language. (1988). DiagonalMatrix. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/DiagonalMatrix.html
BibTeX
@misc{reference.wolfram_2026_diagonalmatrix, author="Wolfram Research", title="{DiagonalMatrix}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/DiagonalMatrix.html}", note=[Accessed: 10-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_diagonalmatrix, organization={Wolfram Research}, title={DiagonalMatrix}, year={2024}, url={https://reference.wolfram.com/language/ref/DiagonalMatrix.html}, note=[Accessed: 10-September-2026]}