news 2026/10/31 2:15:38

迹算子是线性代数中一个基础但非常有用的概念,对于一个方阵,迹等于其主对角线元素之和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
迹算子是线性代数中一个基础但非常有用的概念,对于一个方阵,迹等于其主对角线元素之和

迹算子是线性代数中一个基础但非常有用的概念。对于一个方阵,迹等于其主对角线元素之和。它看似简单,却在矩阵分析、机器学习、优化理论、数值计算和物理建模中频繁出现。相比行列式、特征值等概念,迹的计算更稳定、解释更直观,也更适合通过 Python 进行实验验证。

一、迹算子的数学定义

设AAA是一个n×nn \times nn×n的方阵,其元素记为aija_{ij}aij​,则迹算子定义为:

tr⁡(A)=∑i=1naii \operatorname{tr}(A) = \sum_{i=1}^{n} a_{ii}tr(A)=i=1∑n​aii​

也就是说,迹只与方阵主对角线上的元素有关。例如:

A=[123456789] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}A=​147​258​369​​

则:

tr⁡(A)=1+5+9=15 \operatorname{tr}(A) = 1 + 5 + 9 = 15tr(A)=1+5+9=15

需要注意的是,迹只对方阵有定义。如果一个矩阵不是方阵,例如形状为3×43 \times 43×4或2×52 \times 52×5,则不能直接定义迹。

二、迹算子的主要性质

迹算子之所以重要,不仅因为它定义简单,还因为它具有良好的代数性质。

  1. 线性性
    对任意同阶方阵A,BA, BA,B和标量α,β\alpha, \betaα,β,有:

    tr⁡(αA+βB)=αtr⁡(A)+βtr⁡(B) \operatorname{tr}(\alpha A + \beta B) = \alpha \operatorname{tr}(A) + \beta \operatorname{tr}(B)tr(αA+βB)=αtr(A)+βtr(B)

    这说明迹是一个线性算子。

  2. 转置不变性
    方阵转置后,主对角线元素不变,因此:

    tr⁡(A)=tr⁡(A⊤) \operatorname{tr}(A) = \operatorname{tr}(A^\top)tr(A)=tr(A⊤)

  3. 循环性
    若矩阵乘法维度匹配,则迹满足循环置换性质:

    tr⁡(AB)=tr⁡(BA) \operatorname{tr}(AB) = \operatorname{tr}(BA)tr(AB)=tr(BA)

    更一般地:

    tr⁡(ABC)=tr⁡(BCA)=tr⁡(CAB) \operatorname{tr}(ABC) = \operatorname{tr}(BCA) = \operatorname{tr}(CAB)tr(ABC)=tr(BCA)=tr(CAB)

    但要注意,迹一般不满足任意交换,例如tr⁡(ABC)\operatorname{tr}(ABC)tr(ABC)不一定等于tr⁡(ACB)\operatorname{tr}(ACB)tr(ACB)。

  4. 与特征值的关系
    若AAA是n×nn \times nn×n方阵,其特征值为λ1,λ2,…,λn\lambda_1, \lambda_2, \dots, \lambda_nλ1​,λ2​,…,λn​,则:

    tr⁡(A)=∑i=1nλi \operatorname{tr}(A) = \sum_{i=1}^{n} \lambda_itr(A)=i=1∑n​λi​

    也就是说,迹等于所有特征值之和。这个性质在矩阵分析中非常重要。

  5. 相似不变性
    若PPP可逆,则:

    tr⁡(P−1AP)=tr⁡(A) \operatorname{tr}(P^{-1}AP) = \operatorname{tr}(A)tr(P−1AP)=tr(A)

    这说明迹在相似变换下保持不变,因此它是一个矩阵的内在属性。

三、Python 实现基础版本

下面给出一个不依赖第三方库的基础实现。它可以帮助理解迹算子的计算过程。

deftrace(matrix):""" 计算方阵的迹。 参数: matrix: 二维列表,表示 n x n 方阵 返回: 主对角线元素之和 """n=len(matrix)ifn==0:raiseValueError("矩阵不能为空")forrowinmatrix:iflen(row)!=n:raiseValueError("输入必须是方阵")returnsum(matrix[i][i]foriinrange(n))# 示例矩阵A=[[1,2,3],[4,5,6],[7,8,9]]print("矩阵 A:")forrowinA:print(row)print("tr(A) =",trace(A))

运行结果为:

矩阵 A: [1, 2, 3] [4, 5, 6] [7, 8, 9] tr(A) = 15

这个实现的核心是遍历主对角线元素matrix[i][i],然后求和。它的时间复杂度为O(n)O(n)O(n),因为只需要访问nnn个对角线元素。不过,它没有利用数值计算库,适合教学和小规模数据。

四、基于 NumPy 的高效实现

在实际工程中,更推荐使用 NumPy 计算迹,因为 NumPy 底层使用 C/Fortran 实现,计算效率更高,并且支持大规模数组。

importnumpyasnp A=np.array([[1,2,3],[4,5,6],[7,8,9]])print("A 的形状:",A.shape)print("tr(A) =",np.trace(A))

输出为:

A 的形状: (3, 3) tr(A) = 15

NumPy 中的np.trace不仅可以计算普通方阵的迹,还可以通过offset参数计算偏移对角线的和。例如:

importnumpyasnp A=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])print("主对角线迹:",np.trace(A))print("上移一条对角线:",np.trace(A,offset=1))print("下移一条对角线:",np.trace(A,offset=-1))

输出为:

主对角线迹: 34 上移一条对角线: 24 下移一条对角线: 30

这里需要注意:严格意义上的迹通常指主对角线之和。偏移对角线之和可以看作一种扩展用法,在图像处理、信号处理和某些矩阵分解任务中可能会用到。

五、验证迹的重要性质

1. 线性性验证
importnumpyasnp A=np.array([[1,2],[3,4]])B=np.array([[5,6],[7,8]])alpha=2beta=-1lhs=np.trace(alpha*A+beta*B)rhs=alpha*np.trace(A)+beta*np.trace(B)print("tr(alpha*A + beta*B) =",lhs)print("alpha*tr(A) + beta*tr(B) =",rhs)print("线性性成立:",np.isclose(lhs,rhs))

输出为:

tr(alpha*A + beta*B) = -1 alpha*tr(A) + beta*tr(B) = -1 线性性成立: True
2. 转置不变性验证
importnumpyasnp A=np.array([[1,2,3],[4,5,6],[7,8,9]])print("tr(A) =",np.trace(A))print("tr(A.T) =",np.trace(A.T))print("转置不变性成立:",np.isclose(np.trace(A),np.trace(A.T)))

输出为:

tr(A) = 15 tr(A.T) = 15 转置不变性成立: True
3. 循环性验证
importnumpyasnp A=np.array([[1,2],[3,4]])B=np.array([[5,6],[7,8]])print("tr(AB) =",np.trace(A @ B))print("tr(BA) =",np.trace(B @ A))print("循环性成立:",np.isclose(np.trace(A @ B),np.trace(B @ A)))

输出为:

tr(AB) = 61 tr(BA) = 61 循环性成立: True
4. 特征值之和验证
importnumpyasnp A=np.array([[2,1],[0,3]])eigenvalues=np.linalg.eigvals(A)print("特征值:",eigenvalues)print("特征值之和:",np.sum(eigenvalues))print("tr(A):",np.trace(A))print("迹等于特征值之和:",np.isclose(np.trace(A),np.sum(eigenvalues)))

输出为:

特征值: [2. 3.] 特征值之和: 5.0 tr(A): 5 迹等于特征值之和: True

六、迹在机器学习中的典型应用

迹算子在机器学习中经常出现。例如,在多元高斯分布、协方差矩阵分析、矩阵求导和正则化方法中,迹都可以用来简化表达。

一个常见场景是计算协方差矩阵的迹。协方差矩阵的迹等于所有特征方差之和,因此可以反映数据的总体离散程度。

importnumpyasnp np.random.seed(0)X=np.random.randn(100,3)# 每列代表一个特征cov_matrix=np.cov(X,rowvar=False)print("协方差矩阵:")print(cov_matrix)print("协方差矩阵的迹:",np.trace(cov_matrix))print("各特征方差之和:",np.sum(np.diag(cov_matrix)))

输出类似:

协方差矩阵: [[1.03 0.02 -0.05] [0.02 0.98 0.01] [-0.05 0.01 1.02]] 协方差矩阵的迹: 3.03 各特征方差之和: 3.03

这里可以看到,协方差矩阵的迹等于对角线元素之和,也就是每个特征的方差之和。这个性质在特征选择、降维和模型正则化中都有意义。

七、代码解析

上述代码主要体现了三类实现思路。

第一类是纯 Python 实现。它通过列表索引访问主对角线元素,逻辑清晰,适合理解迹的定义。但它的缺点是效率较低,不适合大规模矩阵。

第二类是NumPy 实现。np.trace直接计算主对角线之和,代码简洁、性能高,也支持偏移对角线。对于工程实践,通常优先使用这种方式。

第三类是性质验证实现。通过构造随机矩阵或特定矩阵,验证迹的线性性、转置不变性、循环性和特征值关系。这类代码有助于从数值实验角度理解抽象性质。

八、实现亮点

这份报告中的实现有以下几个亮点。

第一,从定义出发,逐步过渡到工程实现。先给出基础 Python 版本,再给出 NumPy 版本,既适合学习,也适合实际使用。

第二,通过数值实验验证数学性质。迹的循环性和特征值之和性质如果只停留在公式层面,可能不够直观。用 Python 验证后,可以更清楚地看到这些性质的正确性。

第三,结合机器学习场景。协方差矩阵的迹能够反映数据整体方差,这一应用比单纯计算一个数字更有意义。

第四,代码结构清晰,易于扩展。可以在此基础上继续实现迹范数、Frobenius 范数、矩阵导数验证等内容。

九、注意事项

使用迹算子时需要注意以下几点。

首先,迹只对方阵有定义。如果输入不是方阵,应提前检查矩阵形状。

其次,数值计算中可能存在浮点误差。比较两个迹是否相等时,建议使用np.isclose,而不是直接使用==。

再次,迹的循环性不能随意推广。虽然tr⁡(AB)=tr⁡(BA)\operatorname{tr}(AB) = \operatorname{tr}(BA)tr(AB)=tr(BA)成立,但矩阵乘法本身不满足交换律,因此不能认为AB=BAAB = BAAB=BA。

最后,迹是一个标量,它只能反映矩阵的一部分信息。两个不同矩阵可能具有相同的迹,因此不能仅凭迹判断矩阵是否相等。

十、总结

迹算子是线性代数中一个简洁而重要的工具。它的定义只是主对角线元素之和,但背后连接着线性性、转置不变性、循环性、特征值和相似不变性等多个重要性质。通过 Python 实现,可以从基础算法、数值计算和机器学习应用三个层面理解迹算子。基础实现帮助理解定义,NumPy 实现提高计算效率,性质验证和应用示例则展示了它在实际工程中的价值。对于后续学习矩阵微积分、优化算法、统计学习和数值线性代数,迹算子都是一个值得熟练掌握的基础概念。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 2:14:48

力扣128最长连续序列

枚举数组中的每个数 x,考虑以其为起点,不断尝试匹配 x1,x2,⋯ 是否存在假设最长匹配到了 xy,那么以 x 为起点的最长连续序列即为 x,x1,x2,⋯,xy,其长度为 y1,我们不断枚举并更新答案即可class Solution {public int lo…

作者头像 李华
网站建设 2026/10/31 2:14:47

滑坡自然灾害应急监测 房屋损坏监测数据集 AI图像数据集第10834期

文章目录滑坡损毁房屋实例分割数据集滑坡检测,房屋损毁分割,灾后评估,地质灾害识别,无人机灾害监测滑坡损毁房屋实例分割数据集 滑坡灾害房屋损毁识别是自然灾害应急监测中的重要方向,这份滑坡损毁房屋实例分割数据集…

作者头像 李华
网站建设 2026/10/31 2:13:48

C语言结构体:把一堆不同类型的数据打包在一起[特殊字符]

写 C 语言的时候,char、int、float 这些都是基础类型。但现实世界中的信息往往是成套出现的:一个学生,有姓名、年龄、性别、学号;一本书,有书名、作者、价格。总不能单独定义一堆零散变量 name1、age1、sex1……&#…

作者头像 李华
网站建设 2026/10/31 2:13:35

MySQL CDC 直接写进 Doris 汇总模型:同步即汇总,明细不用搬两遍

MySQL CDC 直接写进 Doris 汇总模型:同步即汇总,明细不用搬两遍 很多实时链路是这样做的:先把 MySQL 明细一条条同步到 Doris,再起一个定时任务做 GROUP BY,把结果写进汇总表。 链路长、延迟高、还多一份明细存储。 这…

作者头像 李华
网站建设 2026/10/31 2:13:34

门窗生产工序与出厂质检清单:八道工序、固化时间与核对项

一、八道工序与各自的控制点 工序一型材下料:按配料单把型材切成段,切口角度常按四十五度拼接控制;同批号与分支位置做标记。下料长度误差往往会放大成框扇对角线偏差,是链路里靠前的控制点。 工序二铣槽冲孔:铣出五金…

作者头像 李华
网站建设 2026/10/31 2:13:09

合并请求怎么合入:在保留提交、压缩和变基里选一种

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华