DiagonalMatrix[list]
给出主对角线元素为 list,其它元素为零的矩阵.
DiagonalMatrix[list,k]
给出第 k
条对角线的元素为 list 的矩阵.
DiagonalMatrix[list,k,n]
与零合并创建一个 n×n 矩阵.
DiagonalMatrix
DiagonalMatrix[list]
给出主对角线元素为 list,其它元素为零的矩阵.
DiagonalMatrix[list,k]
给出第 k
条对角线的元素为 list 的矩阵.
DiagonalMatrix[list,k,n]
与零合并创建一个 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] 总是创建一个 n×n 矩阵,即使必须放弃 list 的元素. »
- 若
,对角矩阵的行列式就是对角线先导项的乘积,否则为 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" 给出偏移量,如果对角线元素分别位于主对角线上、上方或下方,则偏移量为零、正或负:
dm["Offset"]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 对象,则为 true:
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 语言. 1988. "DiagonalMatrix." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2024. https://reference.wolfram.com/language/ref/DiagonalMatrix.html.
APA
Wolfram 语言. (1988). DiagonalMatrix. Wolfram 语言与系统参考资料中心. 追溯自 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: 17-June-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: 17-June-2026]}