跳转至

P2-3.1 标量(scalar)、向量(vector)、矩阵(matrix)

Section ID: P2-3.1 Version: v2026.07.20

在 Part 2 Chapter 2 里,我们重新阅读了数学记号。变量(variable)、函数(function)、表达式(expression)、西格玛(sigma)、极限(limit)是为了读懂“公式到底在说什么”的基础语法。从这里开始,我们转向另一类在 AI 数据被改造成可计算形状时经常出现的基础表达,也就是线性代数(linear algebra)的基本形式。

  1. 我们先看一个数字。
  2. 我们再看一组数值列表。
  3. 我们再看一个带有行和列的表。

这三种分别会连到标量(scalar)、向量(vector)、矩阵(matrix)。这里的重点,是建立这样一种阅读感觉:当 AI 文档把数据写成一个数字、一个列表、或一张表时,我们到底在看什么。

这里重新整理 标量(scalar)向量(vector)矩阵(matrix)shape数组(array)。如果说 Chapter 2 读的是数学一行里的语法与重复记号,那么这里读的是那些表达式真正展开成数据形状之后,我们看到的东西。

这里关注的不是完整的数学理论,而是 AI 数据的基础形状。只要先把标量、向量、矩阵、shape 分清,后面像 输入 X 的 shape 是什么有多少行是样本有多少列是特征 这类问题,就会容易读得多。

这一节现在先抓住什么 紧接着会连到的问题 后面再次出现的位置
标量、向量、矩阵的基本区分 在 P2-3.2 里会看为什么向量可以像位置一样去读。 在 Part 3 里读特征向量和输入矩阵时会再用到,在 Part 5 和 Part 6 里读嵌入向量和分数向量时也会再用到。
shape 会改变计算规则的直觉 在 P2-3.3 里会看矩阵乘法和维度匹配。 在 Part 3 里检查输入矩阵 X、目标 y、train/test 切分结果的形状时会再用到。
把表格数据看成数值数组的视角 在 P2-3.6 里会连到 NumPy 数组计算。 在 Part 3 里读 dataframe 如何转成模型输入数组的流程时会再用到。

核心判断标准:标量(scalar)、向量(vector)、矩阵(matrix)

  • 能把标量(scalar)解释成一个数字。
  • 能把向量(vector)解释成有顺序的值列表。
  • 能把矩阵(matrix)解释成带有行(row)和列(column)的数字数组。
  • 能理解数据的形状(shape)会影响计算方式。
  • 能说明文本、图像、表格数据为什么会被转成可计算的数字数组。
  • 能说明标量、向量、矩阵为什么会在后面的 embedding、feature、batch、模型计算里再次出现。
  • 能说明标量、向量、矩阵的基础数学运算为什么需要 shape。

三个基准

基准 为什么重要 本节所需的理解水平
标量就是一个数字 因为它是读取损失、概率、学习率这类单个值的基本单位。 理解一个数字可以表示一个计算结果或一个配置值。
向量是有顺序的值列表 因为这是用多个特征表示一个对象时最常见的形状。 理解顺序会改变意义,多个数字会被读成一个整体。
矩阵是把多个向量放在一起的表 因为同时计算多个样本和多个特征时,需要行列结构。 理解行可以读成对象、列可以读成特征,shape 会决定计算规则。

为什么先看线性代数

AI 模型不会直接拿现实里的句子、图像、声音、表格来计算。多数情况下,它们会先被变成数字,再以数组(array)的形式处理。

  1. 句子会通过 token 变成数字 ID 和向量。
  2. 图像会变成保存像素值的数组。
  3. 表格数据会被读成带行列结构的矩阵或 dataframe。

线性代数就是阅读这些数字数组的基础语言。比起深层证明,更先需要的是下面这种直觉。

  1. 是不是只有一个值?
  2. 这些值是不是排成一行?
  3. 这些值是不是排成了行和列?
  4. 是不是有多份数据被一起打包了?

这些问题在实际代码里也同样重要。AI 代码出错的常见原因之一,不是误解了值的意义,而是误解了它的 shape。

从一个数字延伸到空间的思路

标量、向量、矩阵、位置,看起来像是彼此分开的概念,但在 AI 计算里,它们其实连成一条流。

  1. 标量表示一个值。
  2. 向量表示把多个值按顺序捆在一起。
  3. 矩阵表示把多个向量按行和列收集起来。
  4. 位置则是把向量看作同一空间里的坐标,拿来彼此比较的视角。

例如,如果只看一个人的年龄,那就是标量。

\[ 30 \]

如果把年龄、身高、访问次数一起看,那就是向量。

\[ [30,\ 172,\ 5] \]

如果把几个人的向量收集起来,那就是矩阵。

\[ \begin{bmatrix} 30 & 172 & 5 \\ 24 & 165 & 2 \\ 41 & 180 & 7 \end{bmatrix} \]

如果再把每个人的向量看作同一空间里的位置,我们就可以考虑人与人之间远近的关系。

  1. 先看一个值。
  2. 把多个值捆起来表示一个对象。
  3. 把多个对象一起收集。
  4. 在同一个空间里比较这些对象。

这条流就是线性代数为什么在 AI 里经常出现的原因。线性代数不只是学习矩阵怎么算的学科,它还是一种语言,用来把数据做成可计算的表示,并比较这些表示之间的关系。

标量就是一个数字

标量(scalar)就是一个数字。比如下面这些值都可以看成标量。

\[ 3 \]
\[ 0.8 \]
\[ -1.2 \]

在 AI 语境里,标量会出现在很多地方。

  • 一个温度值
  • 一个概率(probability)
  • 一个损失(loss)
  • 一个准确率(accuracy)
  • 一个学习率(learning rate)

例如,如果某个模型的平均损失是 0.25,那么这个值本身就是标量。

\[ \mathrm{loss} = 0.25 \]

标量看起来很小,但它非常重要。评估模型时,我们经常会把很多计算结果压缩成一个数字。不过一个数字也会压缩掉很多信息。只知道损失是 0.25,并不能告诉我们模型在哪些数据上做得好、在哪些数据上做错了。

从数学上看,变化的是什么

标量、向量、矩阵的差异不只是形状不同。从数学上看,真正变化的是 可以做什么计算

因为标量是一个数字,所以我们可以立刻想到普通四则运算。

\[ 2 + 3 = 5 \]
\[ 2 \times 3 = 6 \]

向量可以把相同位置上的值相加。

\[ [1,\ 2,\ 3] + [4,\ 5,\ 6] = [5,\ 7,\ 9] \]

如果标量乘到向量上,就是把同一个数字乘到向量的每个值上。

\[ 2[1,\ 2,\ 3] = [2,\ 4,\ 6] \]

矩阵在 shape 相同的时候,也可以逐位置相加。

\[ \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} + \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} = \begin{bmatrix} 6 & 8 \\ 10 & 12 \end{bmatrix} \]

这些计算与其说是复杂的线性代数,不如说更接近 相同位置上的值进行计算 这条规则。也正因为这样,shape 才会变得重要。长度不同的向量,或者行列数量不同的矩阵,不能直接逐位置计算。

  1. shape 相同,就可以逐位置计算。
  2. shape 不同,就必须先决定哪些值应该配对。

这里暂时还不处理矩阵乘法(matrix multiplication)。矩阵乘法并不是简单的逐位置相乘,而是通过组合行与列来产生新值。那部分内容会在 P2-3.3 单独处理。

这里先固定阅读数据形状的标准,而不进入向量空间公理或矩阵乘法算法的完整展开。位置直觉会在 P2-3.2 再收窄一次,矩阵乘法和线性变换会在 P2-3.3 再收窄一次。

向量是值的列表

向量(vector)可以读成有顺序的值列表。

\[ \mathbf{x} = [1,\ 2,\ 3] \]

这里的 \(\mathbf{x}\) 是一个包含 3 个值的向量。这里不把它深入解释成“具有方向和大小的数学对象”,而是先从 AI 数据的角度把它读成“多个数字组成的一束”。

例如,假设我们用三个值来表示一个人:年龄: 30身高: 172每月访问次数: 5

写成向量,就会像这样。

\[ \mathbf{x} = [30,\ 172,\ 5] \]

这个向量把一个人的特征(feature)表示成了数字列表。机器学习里,经常会把多个特征这样收集起来,当成一个输入(input)。

向量里的顺序很重要。必须先固定第一个值表示年龄、身高、还是访问次数。

[30, 172, 5]
-> [年龄, 身高, 每月访问次数]

如果顺序改变,即使数字一样,意义也会变。

[172, 30, 5]
-> [身高, 年龄, 每月访问次数]

所以,向量不是随便堆在一起的一堆数字,而是每个位置都带有意义的一组数字。

矩阵是带行和列的数字数组

矩阵(matrix)是把数字排成行(row)和列(column)的结构。

\[ X = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \]

这个矩阵有 2 行 3 列。通常会把它叫作一个 \(2 \times 3\) 矩阵。这里,行(row)是横向的一整行,列(column)是纵向的一整列,而 shape 指的就是行数和列数。

在 AI 数据里,一行通常可以读成一个数据样本(sample),一列可以读成一个特征(feature)。

例如,如果把 3 个人的数据用年龄、身高、访问次数来表示,就会得到下面这个矩阵。

\[ X = \begin{bmatrix} 30 & 172 & 5 \\ 24 & 165 & 2 \\ 41 & 180 & 7 \end{bmatrix} \]

在这里,有 3 行 3 列。也就是说,3 行代表 3 个人,3 列代表年龄、身高、每月访问次数。

这个视角在阅读机器学习数据集(dataset)时非常重要。在很多入门材料里,\(X\) 表示完整输入数据,\(y\) 表示与每一行对应的目标值(target)或标签(label)。

Shape 是计算的条件

shape 就是数据的形状。它告诉我们,当前看到的是一个值、一个值列表,还是带行和列的数组。

问题场景:我们想一次比较标量、向量、矩阵在代码里分别长什么样。 输入(input):标量数组、一维向量数组、二维矩阵数组。 期望输出(output):依次输出它们各自的 shape。 要确认的概念:shape 是区分“一个数字”“一个列表”“一个行列结构”的基本信息。

# 这个例子用 NumPy 数组创建标量、向量和矩阵,并检查数据形状。
import numpy as np

# scalar、vector、matrix 是用来比较数据存放形状的三个数组。
scalar = np.array(3)
vector = np.array([1, 2, 3])
matrix = np.array([[1, 2, 3], [4, 5, 6]])

# shape 输出让读者先看数组的维度和大小,而不是只看数字值。
print(scalar.shape)
print(vector.shape)
print(matrix.shape)

这段代码在检查三个值的形状。结果可以读成:标量 ()、向量 (3,)、矩阵 (2, 3)

根据库或设置不同,标量的显示方式可能会略有差别,但核心不变。标量就是一个数字,向量是数字列表,矩阵是带行和列的数字数组。

shape 之所以重要,是因为能不能计算会随着 shape 改变。例如,长度不同的向量很难逐位置相加。

\[ [1,\ 2,\ 3] + [4,\ 5] \]

这个式子无法对齐到底哪些值应该相加。在代码里也是一样,如果 shape 对不上,就可能报错,或者以并非你原本打算的方式继续计算。

行和列的意义由问题本身决定

矩阵是数字数组,但这些数字的意义由问题定义来决定。即使是同一个 \(3 \times 3\) 矩阵,在表格数据里,行可以表示人、列可以表示特征;在图像的一部分里,行和列可以表示像素位置;在句子数据里,行可以表示 token、列可以表示 embedding 维度;在 batch 数据里,行可以表示样本、列可以表示特征。

因此,阅读矩阵时不能只看数字的形状,还要检查:这一行表示什么,这一列表示什么,每个值的单位是什么,行和列的顺序是不是固定的。

当你在 AI 文档里看到 输入矩阵特征矩阵嵌入矩阵 这类表达时,第一步应该先确认行和列的意义。

通过案例来看

案例 1. 一个客户会变成向量,多个客户会变成矩阵

学习者在看客户数据表时,通常会围绕“人”来阅读,比如姓名、年龄、访问次数。但一旦把这张表转成模型输入,一个人的多个属性就会开始被读成一个向量,几个人的向量叠起来就会开始被读成一个矩阵。

例如,如果用 年龄每月访问次数平均购买金额 三个数字来表示一个客户,它就会成为一个长度为 3 的向量。如果按照同样方式收集 5 个客户,结果就是一个 5 x 3 的矩阵。此时,一行表示一个客户,一列表示一种特征。

这个案例说明了为什么标量、向量、矩阵需要分开学习。只看一个数字时,标量就够了;如果一个对象要用多个值表示,就需要向量;如果多个对象要一起计算,就需要矩阵。

所以,线性代数入门更接近于学习 怎样把现实世界的数据折叠成可计算的形状,而不是背诵抽象符号。没有这种直觉,后面像特征矩阵、batch 输入、embedding 这样的概念就很难用同一种语言读懂。

标量、向量、矩阵会在哪里再次出现

标量、向量、矩阵会在几乎所有后续 AI 计算说明里再次出现。

  • embedding:把文本或条目表示成向量
  • feature:把一个数据样本表示成由多个值组成的向量
  • batch:把多个样本打包成矩阵或更高维数组
  • loss:把多个计算结果汇总成一个标量
  • model parameter:权重(weight)可以呈现为向量或矩阵
  • matrix multiplication:它会成为同时计算多个输入与权重的基本工具

这里仍然还不去计算矩阵乘法。现在先固定一种感觉:AI 数据经常会被表示成一个数字、一串数字列表、或者一张数字表。

一个简单的阅读例子

假设我们有下面这组数据。

\[ X = \begin{bmatrix} 2 & 8 \\ 4 & 6 \\ 5 & 9 \end{bmatrix} \]

假设在这个矩阵里,行(row)表示学生,列(column)表示 [学习时间, 测验分数]

那么这个矩阵表示:第一个学生的学习时间是 2、测验分数是 8;第二个学生的学习时间是 4、测验分数是 6;第三个学生的学习时间是 5、测验分数是 9。

这里,一个学生的数据就是一个向量。

\[ \mathbf{x}_1 = [2,\ 8] \]

如果把三个学生的数据收集在一起,它就成为一个矩阵。

\[ X = \begin{bmatrix} \mathbf{x}_1 \\ \mathbf{x}_2 \\ \mathbf{x}_3 \end{bmatrix} \]

这个例子里,重要的不是怎么计算,而是怎样阅读。一个值是标量,一个学生的一组特征是向量,多个学生的一组特征就是矩阵。

检查清单

  • 能把标量(scalar)解释成一个数字吗?
  • 能把向量(vector)解释成有顺序的值列表吗?
  • 能把矩阵(matrix)解释成带有行(row)和列(column)的数字数组吗?
  • 能说明 shape 会影响计算是否可行、是否会出错吗?
  • 能说明行和列的意义会随着问题定义而改变吗?
  • 能把一个样本(sample)读成向量,把多个样本读成矩阵吗?
  • 能说明为什么标量、向量、矩阵会在 embedding、feature、batch、loss、parameter 里再次出现吗?
  • 能说明 shape 相同的向量和矩阵可以逐位置相加,而标量乘法是把同一个数字乘到每个值上吗?
  • 能说明从标量到向量、矩阵、位置比较逐步扩展的思路吗?
  • 能把标量、向量、矩阵同时解释成线性代数术语和阅读数据形状的语言吗?
  • X 的 shape、样本数、特征数混在一起时,能用 shape 直觉重新把它们分开吗?

来源与参考资料

  • Marc Peter Deisenroth, A. Aldo Faisal, Cheng Soon Ong, Mathematics for Machine Learning, Cambridge University Press, 2020, 确认日期: 2026-07-19.
  • Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, MIT Press, 2016, 确认日期: 2026-07-19.
  • Charles R. Harris et al., Array Programming with NumPy, Nature, 2020, 确认日期: 2026-07-19.
  • NumPy Developers, numpy.ndarray.shape, NumPy User Guide, 确认日期:2026-07-19. 这个官方参考资料支持把 shape 读成数组维度信息,并在代码中检查它。
  • scikit-learn developers, Glossary of Common Terms and API Elements, scikit-learn User Guide, 确认日期:2026-07-19. 这是确认把 X 读作输入数据矩阵、把 y 读作 target 这一惯例的参考资料。