惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
小众软件
小众软件
博客园 - 叶小钗
宝玉的分享
宝玉的分享
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
U
Unit 42
F
Fortinet All Blogs
IT之家
IT之家
Y
Y Combinator Blog
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
酷 壳 – CoolShell
酷 壳 – CoolShell

菜鸟教程

终端工具推荐 | 菜鸟教程 如何在 Windows 上将 Python 添加到 PATH Linux Cron 定时任务 | 菜鸟教程 REST API 教程 | 菜鸟教程 Python 进度条 | 菜鸟教程 ChromeDriver 说明 | 菜鸟教程 pip 指定国内镜像,并设置不使用 https | 菜鸟教程 Trae 入门教程 | 菜鸟教程 Dify 零门槛打造专属 AI 应用 | 菜鸟教程 1.11 算法代码练习 | 菜鸟教程 解决 VS 编译中产生 C4996 错误的方式 中国大模型大全 | 菜鸟教程
什么是张量? | 菜鸟教程
tianqixin · 2026-07-26 · via 菜鸟教程

从一个数字,到一串数字,再到一张表格——当维度继续增加,我们就得到了张量。它是 AI 世界里描述数据最通用的容器。

1. 直觉引入:张量到底是什么?

先不看公式,看一张照片。一张 3×3 像素的彩色小图,每个像素有 R、G、B 三个亮度值。要完整描述这张图,你需要三个方向的坐标:第几行、第几列、哪个颜色通道

这就是一个"三阶张量"——它不是什么神秘的新概念,只是"表格"这个想法沿着第三个方向又展开了一层。你可以把它理解成"多层叠在一起的矩阵"。

一句话理解:标量是一个点,向量是一排点,矩阵是一个面,张量是把"面"沿着更多方向堆叠起来。阶数(rank)就是"需要几个坐标才能定位一个元素"。

2. 数学定义

2.1 从标量到张量的统一表达

它们本质上是同一件事:一个用若干坐标索引取值的对象,只是索引的个数不同。

名称阶数需要几个坐标定位元素记号
标量00 个$s$
向量11 个:第 $i$ 个$v_i$
矩阵22 个:第 $i$ 行第 $j$ 列$M_{ij}$
张量$n$$n$ 个坐标$T_{i_1 i_2 \dots i_n}$

2.2 形状(Shape)

一个张量的"形状",描述的是它在每个方向上各有多少个元素。对于本讲的 3×3 RGB 图像:

$$ \text{shape}(T) = (3,\ 3,\ 3) \quad \text{对应 } (\text{行}, \text{列}, \text{通道}) $$

张量中元素的总个数,就是形状里所有数字的乘积:

$$ \text{元素总数} = \prod_{k=1}^{n} d_k $$

这里 $d_k$ 是第 $k$ 个维度的大小。上面例子中元素总数为 $3 \times 3 \times 3 = 27$。

2.3 两个张量的加法

形状相同的张量,加法就是对应位置的元素相加,这一点从向量、矩阵到高阶张量都是一致的:

$$ (A + B)_{i_1 i_2 \dots i_n} = A_{i_1 i_2 \dots i_n} + B_{i_1 i_2 \dots i_n} $$

3. Python 实战

用 NumPy 把上面 3×3 RGB 图像的例子跑一遍,直观感受"阶数"和"形状"这两个概念。

3.1 创建一个三阶张量

import numpy as np

# 模拟一张 3x3 像素的彩色小图,最后一维是 RGB 三个通道
image_tensor = np.random.randint(0, 256, size=(3, 3, 3))

print("阶数 (ndim):", image_tensor.ndim)
print("形状 (shape):", image_tensor.shape)
print("元素总数 (size):", image_tensor.size)

阶数 (ndim): 3 形状 (shape): (3, 3, 3) 元素总数 (size): 27

3.2 按坐标取值

# 取第 0 行、第 1 列、G 通道(索引 1)的像素值
pixel_g = image_tensor[0, 1, 1]
print("该位置 G 通道值:", pixel_g)

# 取第 0 行、第 1 列的完整 RGB 三个值(一个 1 阶张量,即向量)
pixel_rgb = image_tensor[0, 1, :]
print("该位置 RGB 向量:", pixel_rgb)

该位置 G 通道值: 143 该位置 RGB 向量: [ 87 143 22]

观察一下:用切片 [0, 1, :] 从三阶张量里取出的结果是一个一阶张量(向量)。这说明"从高阶张量里固定几个坐标,会得到一个更低阶的张量"——这个规律在后面讲神经网络的批量数据处理时会反复用到。

4. 三维可视化:把张量"看"出来

下面用 Plotly 把这个 3×3×3 张量画成空间中的 27 个点:三个坐标轴分别对应"行、列、通道",每个点的颜色深浅代表该位置的数值大小。拖动鼠标可以旋转视角。

3×3×3 张量的空间分布 · 颜色越亮代表数值越大

注意观察:固定"通道"这一层不变,你会看到一个 3×3 的平面——那正是一个二阶张量(矩阵)。这也是为什么我们说"矩阵是张量的一个特例"。

5. 与 AI 的联系

张量之所以是深度学习框架(PyTorch、TensorFlow)里最核心的数据结构,是因为几乎所有 AI 数据都能自然地表示成张量:

数据类型典型形状各维度含义
一段文本的词向量(序列长度, 词向量维度)第几个词,词向量的第几维
一张彩色图片(高, 宽, 通道)行、列、RGB 通道
一批彩色图片(批大小, 高, 宽, 通道)第几张图,再加上图片本身的三个维度
一段视频(帧数, 高, 宽, 通道)第几帧,再加上单帧图片的三个维度

可以看到,"批大小(batch size)"这个训练时最常调的参数,本质上就是给张量多加了一个维度。理解了张量的阶数和形状,你在调试模型时看到 shape mismatch 报错,就能立刻定位是哪个维度对不上。