让我们进一步说明在章节概述中谈到的内容。我们已经看到,向量 (vector)是有序的数字列表。现在,想象一下不仅将数字排成列表,而是排列成矩形网格,就像电子表格或棋盘一样。这基本上就是矩阵。
一个矩阵(复数:matrices)是数字、符号或表达式的矩形排列或表格,它们以行(水平线)和列(垂直线)的方式排列。它们是线性代数中的基本工具,并在机器学习 (machine learning)中常用于组织数据、表示变换等方面。
矩阵的结构:行、列和元素
可以将矩阵看作是整齐排列的数字集合。例如,请看这个矩阵:
A=1−350427−20
这个矩阵有:
- 行: 三条水平的数字线。
- 第1行:
[1 0 7]
- 第2行:
[-3 4 -2]
- 第3行:
[5 2 0]
- 列: 三条垂直的数字线。
- 第1列:
[1 -3 5]ᵀ (T表示转置,通常用于水平书写列向量 (vector))
- 第2列:
[0 4 2]ᵀ
- 第3列:
[7 -2 0]ᵀ
- 元素(或项): 矩阵中的单个数字。这个矩阵有 3×3=9 个元素。
矩阵的维度或大小由行数和列数给出,通常写为“行数 × 列数”。上面的矩阵 A 是一个 3×3 矩阵(读作“三乘三”)。
这里是另一个例子:
B=2.11.004.2−0.53.71.10
这个矩阵 B 有4行2列,所以它是一个 4×2 矩阵。
矩阵与向量 (vector)的联系
你可以将向量(我们在上一章讨论过)视为矩阵的特殊情况:
- 列向量是只有一列的矩阵(一个 m×1 矩阵)。
1−35(这是一个 3×1 矩阵)
- 行向量是只有一行的矩阵(一个 1×n 矩阵)。
[107](这是一个 1×3 矩阵)
这种联系有助于理解向量和矩阵运算之间如何关联。
为什么使用矩阵?
矩阵提供了一种强大的方式来同时表示和操作数字集合。在机器学习 (machine learning)中,它们经常被使用:
- 数据集: 典型的数据集可以表示为一个矩阵,其中每行对应一个数据样本(例如客户或图像),每列对应一个特征(例如年龄、价格或像素强度)。
- 图像: 灰度图像可以表示为一个矩阵,其中每个元素都是一个像素的强度。彩色图像通常使用多个矩阵(每个颜色通道一个:红、绿、蓝)。
- 线性变换: 矩阵可以表示几何对象(由向量 (vector)表示)的旋转、缩放和剪切等运算。
- 模型参数 (parameter): 许多机器学习模型(如线性回归或神经网络 (neural network))学习到的权重 (weight)和偏置 (bias)通常以矩阵形式存储和操作。
矩阵的结构化特性使我们能够定义一致的运算(如加法和乘法,我们很快会讲到),这些运算可以高效地应用于整个数据块。
通用矩阵的可视化
我们通常用大写字母(如 A、B、C)来表示矩阵。为了指代矩阵中的特定元素,我们使用带有两个下标的小写字母:aij。第一个下标 i 指示行号,第二个下标 j 指示列号。
因此,对于一个一般的 m×n 矩阵 A(意为 m 行 n 列),我们可以将其写成:
A=a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn
这里,a21 是第二行第一列的元素。amn 是最后一行(m)和最后一列(n)的元素。
一个一般的 m×n 矩阵 A,显示位于第 i 行第 j 列的元素 aij。
索引注意事项: 在数学中,矩阵索引通常从1开始(因此左上角的元素是 a11)。然而,在许多编程语言中,包括 Python(及其我们将大量使用的NumPy库),索引从0开始。因此,数学中的元素 a11 对应于 NumPy 中的 A[0, 0],而 aij 对应于 A[i-1, j-1]。这是一个常见的易混淆之处,所以在将数学表示转换为代码时请记住这一点。
现在我们明白了矩阵是什么以及它的结构,接下来我们将研究如何更正式地表示矩阵维度,并查看一些主要的特殊类型矩阵。