人工智能与世界模型# 系列文章目录
第二章 数学基础(二)向量、矩阵、行列式与线性变换
文章目录
- [人工智能与世界模型# 系列文章目录](# 系列文章目录)
- 前言
- 一、向量
-
- [1.1 什么是向量?](#1.1 什么是向量?)
- [1.2 向量的核心运算](#1.2 向量的核心运算)
-
- [1.2.1 基础运算](#1.2.1 基础运算)
- [1.2.2 点积与叉积](#1.2.2 点积与叉积)
-
- [点积(内积): a ⋅ b = a 1 b 1 + a 2 b 2 + . . . + a n b n \mathbf{a}·\mathbf{b} = a_1b_1 + a_2b_2 + ... + a_nb_n a⋅b=a1b1+a2b2+...+anbn](#点积(内积): a ⋅ b = a 1 b 1 + a 2 b 2 + . . . + a n b n \mathbf{a}·\mathbf{b} = a_1b_1 + a_2b_2 + ... + a_nb_n a⋅b=a1b1+a2b2+...+anbn)
- [叉积(外积,仅三维向量): a × b = [ a 2 b 3 − a 3 b 2 , a 3 b 1 − a 1 b 3 , a 1 b 2 − a 2 b 1 ] \mathbf{a}×\mathbf{b} = [a_2b_3 - a_3b_2, a_3b_1 - a1b_3, a_1b_2 - a_2b_1] a×b=[a2b3−a3b2,a3b1−a1b3,a1b2−a2b1]](#叉积(外积,仅三维向量): a × b = [ a 2 b 3 − a 3 b 2 , a 3 b 1 − a 1 b 3 , a 1 b 2 − a 2 b 1 ] \mathbf{a}×\mathbf{b} = [a_2b_3 - a_3b_2, a_3b_1 - a1b_3, a_1b_2 - a_2b_1] a×b=[a2b3−a3b2,a3b1−a1b3,a1b2−a2b1])
- [1.2 Numpy实现](#1.2 Numpy实现)
- 二、矩阵
-
- [2.1 什么是矩阵](#2.1 什么是矩阵)
- [2.2 基础运算](#2.2 基础运算)
- [2.3 特殊矩阵](#2.3 特殊矩阵)
- [2.4 矩阵运算运用](#2.4 矩阵运算运用)
- [2.5 Numpy实现矩阵运算](#2.5 Numpy实现矩阵运算)
- 三、行列式
-
- [3.1 什么是行列式](#3.1 什么是行列式)
- [3.2 行列式的性质](#3.2 行列式的性质)
- [3.3 行列式的计算方式](#3.3 行列式的计算方式)
- [3.4 使用Numpy计算行列式](#3.4 使用Numpy计算行列式)
- 四、线性变换
- 五、知识点串联
-
- [5.1 逻辑关系](#5.1 逻辑关系)
- 注意点
前言
线性代数是 AI、计算机图形学、工程计算的核心数学基础,而向量、矩阵、行列式、线性变换贯穿其中。很多初学者会被抽象的符号和定理劝退,但其实它们的本质都能通过 "几何意义 + 实际应用" 理解。本文将从零基础出发,用通俗的语言拆解核心概念,搭配直观几何解释和可直接运行的 Numpy 代码,帮你真正吃透这些知识点,为后续学习 SVD、特征值分解、机器学习算法打下坚实基础。
- 本系列默认读者有python基础
一、向量
1.1 什么是向量?
- 代数定义:向量是有序的数字列表,比如二维向量 [x, y]、三维向量 [x, y, z],n 维向量可表示为 v = [v₁, v₂, ..., vₙ]【行向量】或列向量【竖排形式】。
- 几何意义:二维 / 三维向量是平面 / 空间中的 "箭头"------ 起点在原点,终点坐标对应向量的分量,核心属性是「方向」和「长度」(模)。
下图为[1,1]的向量:

- 注意:向量没有 "位置",只有方向和长度。比如 [1, 2] 和从点 (2,3) 指向 (3,5) 的向量是同一个向量(分量差相同)。
1.2 向量的核心运算
1.2.1 基础运算
| 运算 | 代数 | 几何意义 |
|---|---|---|
| 向量加法 | a + b = [ a 1 + b 1 , a 2 + b 2 ] \mathbf{a} + \mathbf{b} = [a₁+b₁, a₂+b₂] a+b=[a1+b1,a2+b2] | 平行四边形法则 / 三角形法则(首尾相接) |
| 数乘 | k ⋅ a = [ k ⋅ a 1 , k ⋅ a 2 ] ( k 为常数) k·\mathbf{a} = [k·a₁, k·a₂](k 为常数) k⋅a=[k⋅a1,k⋅a2](k为常数) | 拉伸 / 压缩向量(k<0 时反向) |
| 模(长度) | ∣ ∣ a ∣ ∣ = ( a 1 2 + a 2 2 ) ( n 维同理求和开方) ||\mathbf{a}||=\sqrt {(a_1^2 + a_2^2)} (n 维同理求和开方) ∣∣a∣∣=(a12+a22) (n维同理求和开方) | 箭头的长度 |
| 单位向量 | a ^ = a ∣ ∣ a ∣ ∣ \hat{\mathbf{a}}=\frac{\mathbf{a}}{||\mathbf{a}||} a^=∣∣a∣∣a | 保持方向,长度归一(用于表示方向) |
平行四边形法则:

三角形法则:

1.2.2 点积与叉积
点积(内积): a ⋅ b = a 1 b 1 + a 2 b 2 + . . . + a n b n \mathbf{a}·\mathbf{b} = a_1b_1 + a_2b_2 + ... + a_nb_n a⋅b=a1b1+a2b2+...+anbn
几何意义: a ⋅ b = ∣ ∣ a ∣ ∣ ⋅ ∣ ∣ b ∣ ∣ ⋅ c o s θ ( θ 是两向量夹角) \mathbf{a}·\mathbf{b} = ||\mathbf{a}||·||\mathbf{b}||·cos\theta(\theta是两向量夹角) a⋅b=∣∣a∣∣⋅∣∣b∣∣⋅cosθ(θ是两向量夹角),可用于:
- 判断垂直: a ⋅ b = 0 \mathbf{a}·\mathbf{b} = 0 a⋅b=0时两向量垂直
- 计算投影: 向量 a \mathbf{a} a在 b \mathbf{b} b方向的投影长度 = ( a ⋅ b ) ∣ ∣ b ∣ ∣ \frac{(\mathbf{a}·\mathbf{b})}{||\mathbf{b}||} ∣∣b∣∣(a⋅b)
- 相似度: θ \theta θ越小或者点积越大,向量 a \mathbf{a} a和向量 b \mathbf{b} b的相似度越高
叉积(外积,仅三维向量): a × b = [ a 2 b 3 − a 3 b 2 , a 3 b 1 − a 1 b 3 , a 1 b 2 − a 2 b 1 ] \mathbf{a}×\mathbf{b} = [a_2b_3 - a_3b_2, a_3b_1 - a1b_3, a_1b_2 - a_2b_1] a×b=[a2b3−a3b2,a3b1−a1b3,a1b2−a2b1]
几何意义:结果是垂直于 a \mathbf{a} a、 b \mathbf{b} b 所在平面的向量,模长 ∣ ∣ a × b ∣ ∣ = ∣ ∣ a ∣ ∣ ⋅ ∣ ∣ a ∣ ∣ ⋅ s i n θ ||\mathbf{a}×\mathbf{b}|| = ||\mathbf{a}||·||\mathbf{a}||·sin\theta ∣∣a×b∣∣=∣∣a∣∣⋅∣∣a∣∣⋅sinθ(等于以 a \mathbf{a} a、 b \mathbf{b} b 为邻边的平行四边形面积),可用于:
- 判断平行: a × b = 0 \mathbf{a}×\mathbf{b} = 0 a×b=0时两向量平行
- 确定法向量(图形学中经常用到)
1.2 Numpy实现
如果没有安装numpy,请先安装:
bash
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/
示例代码:
python
import numpy as np
# 1. 定义向量(行向量/列向量)
row_vec = np.array([1, 2, 3]) # 行向量
col_vec = np.array([[1], [2], [3]]) # 列向量(二维数组表示)
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 2. 基本运算
vec_add = a + b # 向量加法:[5 7 9]
a_scalar = 2 * a # 数乘:[2 4 6]
a_norm = np.linalg.norm(a) # 模长:√(1+4+9)=√14≈3.7417
a_unit_vec = a / a_norm # 单位向量
# 3. 点积与叉积
dot_product = np.dot(a, b) # 点积:1*4 + 2*5 +3*6=32
cross_product = np.cross(a, b) # 叉积:[2*6-3*5, 3*4-1*6, 1*5-2*4] = [-3,6,-3]
print("行向量:", row_vec)
print("列向量:", col_vec)
print("---------------------------------------")
print("a + b:", vec_add)
print("2 * a:", a_scalar)
print("a的模:", a_norm)
print("a的单位向量:", a_unit_vec)
print("---------------------------------------")
print("点积结果:", dot_product)
print("叉积结果:", cross_product)
运行结果:

二、矩阵
2.1 什么是矩阵
- 定义:矩阵是 m 行 n 列的数字矩形阵列,记为 A ∈ R ( m × n ) \mathbf{A} \in R^{(m×n)} A∈R(m×n)(m 行 n 列,元素为实数),比如:
A = [ 1 2 3 4 5 6 7 8 9 ] \mathbf{A} = \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7&8&9 \end{bmatrix} A= 147258369 - 代数意义:从代数角度看,矩阵乘以向量的结果,是矩阵的列向量以向量的分量为权重的线性组合。设矩阵 A 的列向量为 a₁, a₂, ..., aₙ,向量 x = [x₁, x₂, ..., xₙ]ᵀ,那么:A * x = x₁a₁ + x₂a₂ + ... + xₙ*aₙ
- 几何意义:矩阵是「线性变换的载体」------ 用矩阵乘以向量,本质是对向量进行 "旋转、缩放、剪切" 等变换(后续线性变换章节详细讲)
- 核心用途:表示线性方程组、存储数据(如一张图片可视为像素值矩阵)、描述变换规则。
2.2 基础运算
| 运算 | 规则说明 | 注意事项 |
|---|---|---|
| 矩阵加法 | 同形状矩阵(m×n)对应元素相加 | 不同形状无法相加 |
| 数乘 | 常数 k 乘矩阵所有元素 | 不改变矩阵形状 |
| 矩阵乘法 | 若 A 是 m×p 矩阵,B 是 p×n 矩阵,则 AB 是 m×n 矩阵;AB [i][j] = A 第 i 行・B 第 j 列(点积) | 不满足交换律(AB≠BA),满足结合律 |
| 转置 | 行变列、列变行,记为 A T ; ( A B ) T = B T A T ) \mathbf{A}^T; (\mathbf{AB})^T = B^TA^T) AT;(AB)T=BTAT) | 对称矩阵满足 A T = A \mathbf{A}^T = \mathbf{A} AT=A |
| 逆矩阵 | 若存在 A − 1 \mathbf{A}^{-1} A−1,使得 A A − 1 = A − 1 A = I \mathbf{A}\mathbf{A}^{-1} = \mathbf{A}^{-1}\mathbf{A} = I AA−1=A−1A=I(单位矩阵),则 A \mathbf{A} A 可逆 | 仅方阵(m=n)可能可逆;行列式≠0 是可逆的充要条件 |
2.3 特殊矩阵
- 单位矩阵 I I I:对角线元素为 1,其余为 0,比如 2×2 单位矩阵 [[1,0],[0,1]];作用:乘以任何矩阵 / 向量不变(类似数字 1)。
- 零矩阵 O O O:所有元素为 0,作用:类似数字 0, A + O = A A+O=A A+O=A。
- 对称矩阵: A T = A A^T = A AT=A(对角线对称),比如 [[1,2],[2,3]],常见于协方差矩阵。
- 正交矩阵: A T = A − 1 A^T = A^{-1} AT=A−1(转置等于逆),作用:对向量旋转 / 反射变换,不改变向量长度(图形学常用)。
本文由于篇幅问题仅作引出,后续用到之前会单独开一篇帖子讲解,所有大家现在先不用钻对称矩阵和正交矩阵为什么这样的牛角尖。先有一个整体概念即可。
2.4 矩阵运算运用
需求:你有现在手里有64个股票的数据,分别为每只股票的收盘价( x 1 x_1 x1)、成交量( x 2 x_2 x2)、涨跌幅( x 3 x_3 x3)及市盈率( x 4 x_4 x4),假设现在你手里面有一个非常nice的函数可以非常准确的预测明天的开盘价,公式如下:
明天开盘价 = H ( x 1 , x 2 , x 3 , x 4 ) = 0.95 x 1 + 0.0001 x 2 − 1.1 x 3 + 0.9 x 4 明天开盘价 = H(x_1,x_2,x_3,x_4) = 0.95x_1 + 0.0001x2 - 1.1x_3 + 0.9x_4 明天开盘价=H(x1,x2,x3,x4)=0.95x1+0.0001x2−1.1x3+0.9x4(本公式纯属胡扯,教学使用)
计算出64个股票的明天开盘价
-
传统方式:写一个循环遍历每个股票过一遍函数
-
矩阵方式:
将股票数据存储为一个(64, 4)的矩阵 X X X,每一行存储一个股票的数据,声明一个[[0.95], [0.00001], [-1.1], [0.9]]的列向量(4, 1) W W W
这时通过一次矩阵 X X X乘上向量 W W W的方式,一次性将64个预测值计算了出来
明天开盘价 = X ⋅ W X·W X⋅W
结果为(64, 1)的列向量,其中每一行的那个值就是每只股票计算出来的预测值
2.5 Numpy实现矩阵运算
代码示例:
python
import numpy as np
# 1. 定义矩阵
A = np.array([[1, 2], [3, 4]]) # 2×2矩阵
B = np.array([[5, 6], [7, 8]]) # 2×2矩阵
v = np.array([1, 0]) # 向量
# 2. 基础运算
mat_add = A + B # 矩阵加法:[[6,8],[10,12]]
mat_scalar = 2 * A # 数乘:[[2,4],[6,8]]
mat_mul = np.dot(A, B) # 矩阵乘法:[[1*5+2*7, 1*6+2*8], [3*5+4*7, 3*6+4*8]] = [[19,22],[43,50]]
mat_transpose = A.T # 转置:[[1,3],[2,4]]
print("A + B:\n", mat_add, '\n')
print("2 * A:\n", mat_add, '\n')
print("A · B:\n", mat_mul, '\n')
print("A^T:\n ", mat_transpose, '\n')
print("----------------------------------------------------")
# 3. 逆矩阵(仅方阵)
if np.linalg.det(A) != 0: # 判断行列式≠0(可逆)
A_inv = np.linalg.inv(A) # 逆矩阵:[[-2,1],[1.5,-0.5]]
print("A的逆矩阵:\n", A_inv, '\n')
print("A·A⁻¹ = \n", np.dot(A, A_inv), '\n') # 结果接近单位矩阵(浮点误差)
# 4. 矩阵乘向量(向量变换)
v_transformed = np.dot(A, v) # 变换后的向量:[1*1+2*0, 3*1+4*0] = [1,3]
print("向量v经矩阵A变换后:", v_transformed)
运行结果:

三、行列式
3.1 什么是行列式
行列式是一个与方阵关联的标量值。可以看作是一种对方阵进行数值化描述的方法,通过它可以获取到矩阵的一些重要信息。仅方阵有行列式(记为 det (A) 或 |A|)
- 几何意义:行列式的绝对值是「矩阵对应的线性变换对空间的缩放比例」:
2×2 矩阵:|det (A)| 是变换后单位正方形的面积;
3×3 矩阵:|det (A)| 是变换后单位立方体的体积;
若 det (A)=0:变换后空间被 "压缩" 到更低维度(比如平面压成直线),信息有所缺失,所以矩阵不可逆;
若 det (A)<0:变换包含 "镜像翻转"(改变空间定向)。
3.2 行列式的性质
- 行 / 列互换,行列式值不变;
- 某行 / 列乘以常数 k,行列式变为 k・det (A);
- 两行 / 列交换,行列式变号;
- 若两行 / 列成比例,det (A)=0(矩阵不可逆);
- det (AB) = det (A)・det (B)(乘积的行列式 = 行列式的乘积);
- d e t ( A − 1 ) = 1 / d e t ( A ) det (A^{-1}) = 1/det (A) det(A−1)=1/det(A)(逆矩阵的行列式 = 原行列式的倒数)。
3.3 行列式的计算方式
不做重点,感兴趣的可以看看下面这个帖子
行列式的计算方式
3.4 使用Numpy计算行列式
示例代码:
python
import numpy as np
# 1. 计算行列式
A = np.array([[1, 2], [3, 4]])
det_A = np.linalg.det(A) # 2×2行列式:1*4 - 2*3 = -2
print("det(A) =", det_A)
B = np.array([[1, 0, 0], [0, 2, 0], [0, 0, 3]]) # 对角矩阵
det_B = np.linalg.det(B) # 对角矩阵行列式=对角线元素乘积:1*2*3=6
print("det(B) =", det_B)
# 2. 验证性质:det(AB) = det(A)·det(B)
AB = np.dot(A, np.array([[2,0],[0,1]])) # A乘以对角矩阵
det_AB = np.linalg.det(AB)
det_A_det_B = det_A * np.linalg.det(np.array([[2,0],[0,1]]))
print("det(AB) =", det_AB)
print("det(A)·det(B) =", det_A_det_B) # 结果相等(-4 = -2*2)
# 3. 行列式=0的矩阵(不可逆)
C = np.array([[1, 2], [2, 4]]) # 第二行是第一行的2倍
det_C = np.linalg.det(C) # 1*4 - 2*2 = 0
print("det(C) =", det_C)
# np.linalg.inv(C) # 报错:LinAlgError(奇异矩阵,不可逆)
运行结果:

四、线性变换
- 定义 :满足两个条件的变换 T(输入向量→输出向量):
可加性:T (u + v) = T (u) + T (v)
齐次性:T (k・v) = k・T (v)(k 为常数) - 通俗理解:变换后「直线仍为直线,原点保持不变」,没有 "弯曲" 或 "平移"(平移是非线性变换)。
- 核心结论 :所有线性变换都可以用矩阵表示------ 若 T 是 Rⁿ→Rᵐ的线性变换,则存在 m×n 矩阵 A,使得 T (v) = A・v(矩阵乘向量)。
五、知识点串联
5.1 逻辑关系
向量 → 矩阵(向量的变换规则)→ 行列式(矩阵变换的缩放比例)→ 线性变换(矩阵的本质)
- 向量是变换的 "对象";
- 矩阵是变换的 "规则";
- 行列式是变换的 "副作用"(缩放 / 降维);
- 线性变换是矩阵的 "数学本质"(所有矩阵都对应唯一线性变换,反之亦然)。
注意点
- 矩阵乘法不满足交换律:AB≠BA(变换顺序影响结果,比如先旋转后缩放≠先缩放后旋转);
- 只有方阵有行列式和逆矩阵:非方阵(如 2×3 矩阵)无法计算行列式,也不可逆;
- 行列式 = 0 → 矩阵不可逆 → 线性变换降维(空间被压缩);
- 向量的点积是标量,叉积是向量(仅三维)。
本文为个人见解,如有错误,评论区指出