news 2026/2/10 17:23:08

人工智能之数学基础 线性代数:第五章 张量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
人工智能之数学基础 线性代数:第五章 张量

人工智能之数学基础 线性代数

第五章 张量


文章目录

  • 人工智能之数学基础 线性代数
  • 前言
  • 一、什么是张量?
    • 1. 阶数(Order / Rank)
  • 二、3 阶张量的直观理解
    • 🌰 示例:彩色图像
  • 三、张量的基本运算
    • 1. 张量加法与标量乘法
    • 2. 广播(Broadcasting)
    • 3. 张量缩并(Contraction)—— 推广的“乘法”
      • (a) **内积(点积)沿指定轴**:`np.tensordot`
        • 📌 3 阶张量示例:
      • (b) **爱因斯坦求和约定(Einstein Summation)**:`np.einsum`
        • 常见用法:
    • 4. 张量重塑(Reshape)与转置(Transpose)
    • 5. 沿轴聚合操作(Aggregation)
  • 四、3 阶张量的“乘法”类型详解
    • 🔧 模态积(Mode-n Product)示例
      • Python 实现:
  • 五、高级张量分解(简介)
  • 六、PyTorch / TensorFlow 中的张量
    • PyTorch 示例:
  • 七、完整代码示例:3D 张量操作汇总
  • 八、总结
  • 后续
  • 资料关注

前言

虽然“张量”一词在物理学、微分几何中有更广义的定义,但在现代数据科学、机器学习和数值计算中,张量通常被理解为多维数组(multi-dimensional array)。本文将从这一实用视角出发,系统介绍张量的基本概念、3 维及以上张量的运算规则,并提供完整的Python(NumPy / PyTorch)代码实现


一、什么是张量?

1. 阶数(Order / Rank)

张量的“阶”指其维度数量(注意:不是矩阵的秩!):

阶数名称数学对象NumPy shape 示例
0标量(Scalar)单个数()
1向量(Vector)一维数组(5,)
2矩阵(Matrix)二维数组(3, 4)
33 阶张量三维数组(2, 3, 4)
nn 阶张量n 维数组(d₁, d₂, ..., dₙ)

关键点

  • 矩阵是 2 阶张量的特例;
  • 张量 ≠ 必须满足坐标变换规则(那是物理定义),在深度学习中 = 多维数组。

二、3 阶张量的直观理解

一个形状为(I, J, K)的 3 阶张量可视为:

  • I 个J×K矩阵堆叠而成(如彩色图像:3 个通道 × 高 × 宽)
  • J 个I×K矩阵沿第 1 维切片
  • K 个I×J矩阵沿第 2 维切片

🌰 示例:彩色图像

# 一张 64×64 的 RGB 图像image=np.random.rand(64,64,3)# shape: (height, width, channels)
  • 第 0 维:高度(64)
  • 第 1 维:宽度(64)
  • 第 2 维:颜色通道(R, G, B)

三、张量的基本运算

1. 张量加法与标量乘法

  • 要求:两个张量形状完全相同(或可广播)
  • 操作:逐元素进行
importnumpyasnp A=np.random.rand(2,3,4)B=np.random.rand(2,3,4)C=A+B# 逐元素相加D=2.5*A# 标量乘法

2. 广播(Broadcasting)

NumPy 允许不同形状的张量在满足规则下进行运算。

A=np.random.rand(2,3,4)# shape (2,3,4)b=np.random.rand(4,)# shape (4,) → 可广播到 (2,3,4)C=A+b# b 被自动扩展到每个 (i,j,:) 位置

广播规则(从后往前对齐维度):

  • 每一维要么相等,要么其中一个是 1,要么缺失。

3. 张量缩并(Contraction)—— 推广的“乘法”

(a)内积(点积)沿指定轴np.tensordot

np.tensordot(A, B, axes)AB的指定轴求和。

经典例子:矩阵乘法是tensordot的特例:

C=np.tensordot(A,B,axes=([-1],[0]))# A: (m,n), B: (n,p) → C: (m,p)
📌 3 阶张量示例:
# A: (2, 3, 4), B: (4, 5, 6)# 想对 A 的第 2 轴(size=4)和 B 的第 0 轴(size=4)做缩并C=np.tensordot(A,B,axes=([2],[0]))# 结果 shape: (2, 3, 5, 6)

(b)爱因斯坦求和约定(Einstein Summation)np.einsum

极其强大且灵活的张量运算工具!

语法:np.einsum('subscripts', operand1, operand2, ...)

常见用法:
A=np.random.rand(2,3,4)B=np.random.rand(4,5)# 1. 矩阵乘法(最后维 × 第一维)C=np.einsum('ijk,kl->ijl',A,B)# shape (2,3,5)# 2. 沿某轴求和(迹、均值等)sum_over_k=np.einsum('ijk->ij',A)# 对 k 求和,shape (2,3)# 3. 转置A_transposed=np.einsum('ijk->kji',A)# shape (4,3,2)# 4. 逐元素乘 + 求和(类似内积)x=np.random.rand(2,3,4)y=np.random.rand(2,3,4)inner=np.einsum('ijk,ijk->',x,y)# 标量

💡einsum是处理高维张量的瑞士军刀!


4. 张量重塑(Reshape)与转置(Transpose)

T=np.random.rand(2,3,4)# 重塑T_flat=T.reshape(-1)# 展平为 (24,)T_reshaped=T.reshape(6,4)# (2,3,4) → (6,4)# 转置(任意维度重排)T_trans=np.transpose(T,(2,0,1))# 原 (0,1,2) → 新 (2,0,1),shape (4,2,3)# 等价于T_trans2=T.transpose(2,0,1)

5. 沿轴聚合操作(Aggregation)

T=np.random.rand(2,3,4)mean_axis0=T.mean(axis=0)# shape (3,4)sum_axis12=T.sum(axis=(1,2))# shape (2,)max_all=T.max()# 标量

四、3 阶张量的“乘法”类型详解

运算类型描述NumPy 实现
逐元素乘A * BA * B
模态积(Mode-n Product)张量 × 矩阵(沿某一模式)自定义或einsum
张量-向量积张量 × 向量(缩并一维)einsum
张量-矩阵积如 Tucker 分解中的核心运算einsum或专用库

🔧 模态积(Mode-n Product)示例

设张量 $\mathcal{X} \in \mathbb{R}^{I \times J \times K} $,矩阵 $U \in \mathbb{R}^{P \times I} $,则mode-1 product定义为:

Y = X × 1 U ∈ R P × J × K \mathcal{Y} = \mathcal{X} \times_1 U \in \mathbb{R}^{P \times J \times K}Y=X×1URP×J×K

其中:

Y ( p , j , k ) = ∑ i = 1 I X ( i , j , k ) ⋅ U ( p , i ) \mathcal{Y}(p, j, k) = \sum_{i=1}^I \mathcal{X}(i, j, k) \cdot U(p, i)Y(p,j,k)=i=1IX(i,j,k)U(p,i)

Python 实现:

X=np.random.rand(3,4,5)# (I,J,K) = (3,4,5)U=np.random.rand(2,3)# (P,I) = (2,3)# Mode-1 product: X ×₁ UY=np.einsum('pi,ijk->pjk',U,X)# 注意 U 是 (p,i),所以是 'pi'print("Y shape:",Y.shape)# (2,4,5)

同理:

  • Mode-2:np.einsum('qj,ijk->iqk', V, X)
  • Mode-3:np.einsum('rk,ijk->ijr', W, X)

这是高阶 SVD(HOSVD)Tucker 分解的基础。


五、高级张量分解(简介)

虽然超出基础范围,但值得了解:

分解描述应用
CP 分解将张量表示为秩-1 张量之和推荐系统、信号分离
Tucker 分解X = G × 1 U ( 1 ) × 2 U ( 2 ) × 3 U ( 3 ) \mathcal{X} = \mathcal{G} \times_1 U^{(1)} \times_2 U^{(2)} \times_3 U^{(3)}X=G×1U(1)×2U(2)×3U(3)数据压缩、特征提取
Tensor Train (TT)链式低秩表示高维函数逼近

可使用tensorly库实现:

importtensorlyastlfromtensorly.decompositionimporttucker X=tl.tensor(np.random.rand(10,10,10))core,factors=tucker(X,rank=[5,5,5])

六、PyTorch / TensorFlow 中的张量

深度学习框架中的张量支持 GPU 加速和自动微分。

PyTorch 示例:

importtorch# 创建 3 阶张量T=torch.randn(2,3,4,requires_grad=True)# 运算(自动记录计算图)U=torch.randn(5,2)Y=torch.einsum('pi,ijk->pjk',U,T)# mode-1 product# 反向传播loss=Y.sum()loss.backward()print("T.grad shape:",T.grad.shape)# (2,3,4)

七、完整代码示例:3D 张量操作汇总

importnumpyasnp# 创建 3 阶张量X=np.random.rand(2,3,4)print("X shape:",X.shape)# 1. 逐元素运算Y=X*2+1# 2. 沿轴求和s0=X.sum(axis=0)# (3,4)s01=X.sum(axis=(0,1))# (4,)# 3. tensordot 缩并A=np.random.rand(4,5)Z=np.tensordot(X,A,axes=([2],[0]))# (2,3,5)# 4. einsum 多种操作# 转置X_t=np.einsum('ijk->kij',X)# mode-1 productU=np.random.rand(7,2)X_mode1=np.einsum('pi,ijk->pjk',U,X)# (7,3,4)# 内积inner=np.einsum('ijk,ijk->',X,X)# 5. 重塑X_flat=X.reshape(-1)X_reshaped=X.reshape(6,4)print("Z shape:",Z.shape)print("X_mode1 shape:",X_mode1.shape)print("Inner product:",inner)

八、总结

概念说明
张量 = 多维数组阶数 = 维度数
基本运算加法、标量乘、广播
核心乘法tensordoteinsum(推荐)
模态积张量 × 矩阵(沿特定模式),用于高阶分解
工具NumPy(CPU)、PyTorch/TensorFlow(GPU + 自动微分)
应用视频数据(帧×高×宽×通道)、医学影像(3D MRI)、多关系图(实体×关系×实体)

💡建议

  • 对于复杂张量运算,优先使用np.einsum,它清晰、高效、通用;
  • 在深度学习中,张量是数据的基本载体,理解其操作是构建模型的基础。

后续

python过渡项目部分代码已经上传至gitee,后续会逐步更新。

资料关注

公众号:咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》

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

HTML 视频(Video)播放

HTML 视频(Video)播放 概述 HTML5 引入的 <video> 元素为网页提供了一种在浏览器中嵌入和播放视频内容的方式。它极大地简化了在网页上嵌入视频的过程,并允许开发者通过多种方式进行控制。 视频元素介绍 在 HTML5 中,<video> 元素用于在网页上嵌入视频。它…

作者头像 李华
网站建设 2026/2/5 23:19:09

通信系统仿真:通信系统基础理论_(4).数字通信基础

数字通信基础 1. 数字信号的表示与处理 1.1 数字信号的概念 数字信号是离散时间信号的一种,通常由一系列的二进制位组成。在数字通信系统中,信息首先被转化为数字信号,然后通过信道传输,最终在接收端恢复为原始信息。数字信号具有抗干扰能力强、易于存储和处理等优点,因…

作者头像 李华
网站建设 2026/2/6 22:29:49

Python 爬虫实战:将爬取数据存入 CSV 表格

前言 在数据采集与分析的工作场景中&#xff0c;Python 爬虫是获取网络公开数据的核心技术手段&#xff0c;而将爬取到的数据规范化存储则是后续数据处理的基础环节。CSV&#xff08;逗号分隔值&#xff09;格式作为一种轻量级、跨平台的表格文件格式&#xff0c;因其结构简单…

作者头像 李华
网站建设 2026/2/9 21:02:46

Python 爬虫实战:urllib 库的核心用法与实战案例

前言 在 Python 爬虫领域&#xff0c;urllib 库作为内置的 HTTP 请求处理库&#xff0c;是入门爬虫开发的核心工具之一。它无需额外安装&#xff0c;原生支持 HTTP/HTTPS 请求发送、响应处理、URL 解析等核心功能&#xff0c;是理解爬虫底层原理的重要载体。本文将从 urllib 库…

作者头像 李华
网站建设 2026/1/30 3:45:20

震惊!这家云服务器厂家竟让巨头们连夜排队抢购!

震惊&#xff01;这家云服务器厂家竟让巨头们连夜排队抢购&#xff01; 在竞争日趋白热化的云计算市场&#xff0c;一家服务商的产品发布能让行业巨头们放下身段、连夜排队抢购&#xff0c;这听起来像是天方夜谭。然而&#xff0c;近期在业内流传的一则消息&#xff0c;却将这…

作者头像 李华
网站建设 2026/2/10 7:54:53

18、Linux 文件与目录操作及数据处理指南

Linux 文件与目录操作及数据处理指南 1. 文件操作 1.1 删除文件 在文本模式的 shell 中,可以使用 rm 命令来删除文件。只需将一个或多个文件名作为参数传递给该命令即可,例如: $ rm outline.pdf outline.txt此命令会删除 outline.pdf 和 outline.txt 这两个文件。…

作者头像 李华