
1. 把矩阵从数表看成动作是理解线性变换的第一道坎很多人第一次接触线性变换脑子里留下的是一个模糊印象矩阵是一堆数排成方块线性变换就是拿矩阵去乘向量乘完得到一个结果。至于这个结果为什么长这样、乘的过程发生了什么全靠背公式。我自己当年就是这样——会算[[2,0],[0,2]]乘(1,1)得到(2,2)但完全说不清这个乘法在几何上意味着什么。问题的根源在于教材先把矩阵当作一个静态的数表塞给你教会你行列怎么对齐、怎么相加相乘等到你形成肌肉记忆之后才告诉你其实矩阵代表线性变换。可这时你已经在用纯代数的视角看它了几何直觉被彻底压住。今天我想换个顺序先把线性变换当成一个动作讲清楚再回头告诉你这个动作为什么能被写成一个矩阵。线性变换说的是这样一件事你在平面上有一个点还有一个箭头向量从原点指向它。现在有一台机器你把任何一个向量喂进去它吐出一个新的向量。这台机器需要满足两条脾气你先把两个向量加起来再喂进去和分别喂进去再把结果加起来得到的东西一样你先把向量拉长三倍再喂进去和先喂进去再把结果拉长三倍得到的东西一样。用公式写就是T(uv) T(u) T(v)和T(cv) c·T(v)。这两条合起来行业内管它叫线性性。看起来抽象翻译成人话就是这台机器不搞特殊化它对所有向量一视同仁只做比例上的拉扯和方向上的搬运。能满足这两条的机器其实少得可怜它们有一个共同特征——原点永远不动。原点是所有向量的起点如果机器把原点搬走了那向量之间的加法关系立刻就崩了。所以判断一个变换是不是线性的最快的一招是看原点原点动了直接出局。比如给每个向量加一个固定偏移量这种平移操作就不是线性变换它是仿射变换多出来一个平移分量。那为什么线性变换这么重要因为它足够简单简单到整套系统只需要一张小表就能完全描述又足够强大强大到现实里绝大多数的缩放、旋转、投影、压缩都能拆成它的组合。三维建模里模型的旋转、机器学习里数据的降维、图像处理里的仿射校正底层都是线性变换在干活。理解了这台机器的运作方式后面那一堆关于矩阵、特征值、秩的概念就都有了落脚点而不是悬在空中的符号。这套内容适合两类人看一类是正在学线性代数、被矩阵乘法规则搞晕的学生一类是已经在用这些工具做图形、做数据、做算法但一直没把几何图像补齐的从业者。不管你是哪一类只要你能在脑子里看见变换发生的过程后面所有公式都会变得顺理成章。2. 只盯住两个基向量就能锁定整台机器2.1 线性性到底给了我们多大的便利线性性带来的最大福利是你不需要知道机器如何搬运每一个向量只需要知道它把两个基向量搬到了哪里。理由很直白。平面上任何一个向量都能写成两个基向量的加权和。默认基向量记作 e₁ 指向 x 轴正方向单位长度e₂ 指向 y 轴正方向单位长度那向量(x, y)其实就是x·e₁ y·e₂。现在把(x, y)喂进机器根据线性性的第二条规则机器可以先把 x 和 y 这两个数字提到外面来T(x·e₁ y·e₂) x·T(e₁) y·T(e₂)这个式子是整个线性代数的支柱。它告诉你只要我知道 T(e₁) 和 T(e₂) 分别落到了哪个位置任何向量的像我都能用同样的加权方式拼出来。x 和 y 从头到尾没变它们只是权重变的是被加权的那两个落脚点。这件事太省事了。你本来要回答的问题是机器如何搬运无穷多个向量现在问题被压缩成了机器如何搬运两个向量。信息量从无穷降到了四个数字。如果 x 和 y 稍微变一下比如从(1, 1)变成(2, 1)你会看到新的像是2·T(e₁) 1·T(e₂)也就是把第一个落脚点再往外拉了一倍然后接上第二个。整个图案是在按权重组装落脚点而不是每次重新算一遍。2.2 动手做一个追踪实验把感觉建立起来光看公式不够我强烈建议你拿一张方格纸实际操作一遍。选一个具体的矩阵比如 A [[2, 0], [0, 1]]按下面的方式追踪第一步画出原始的两个基向量 e₁ 指向右边、e₂ 指向上边画成两条单位长度的小箭头。第二步先单独看第一列(2, 0)这是 e₁ 的落脚点它从(1, 0)被拉长到了(2, 0)长度翻倍方向没变。第三步再看第二列(0, 1)这是 e₂ 的落脚点它原地不动。第四步画一条从(1, 1)出发的箭头观察它落在(2, 1)。你数格子就能看出x 方向被拉了两倍y 方向没动。整个方格纸上的图形横向被抻长了一倍纵向原封不动。做完这个实验你会得到一个特别强烈的感受矩阵的两列就是两个基向量的新地址。这个结论听起来平淡但它是你后面看所有矩阵的眼睛。看到[[3, 0], [0, 3]]你立刻知道两个基向量一起往外拉了 3 倍整个平面同比放大看到[[0, -1], [1, 0]]第一列(0, 1)说明 e₁ 转到了 y 轴正方向第二列(-1, 0)说明 e₂ 转到了 x 轴负方向整个平面逆时针转了 90 度。2.3 为什么网格必须保持平直且等距线性性还有一个附带效果平时容易被忽略但至关重要它逼着整张方格纸在变形后依然是平直的、等距的网格。想一下为什么会这样。方格纸上任意两条平行且等长的线段它们的向量形式相差一个固定的位移量。如果这个位移量是某个向量 w 方向上的平移那么根据线性性变形之后两条线段的像依然相差 T(w)也就是依然等长且平行。所以平行关系被保留等距关系也被保留。原本规整的方格变形之后会变成一片由平行四边形拼成的、同样规整的网格只是格子可能被拉长、压扁、倾斜成了斜方格但绝不会弯曲、绝不会一边密一边疏。这个约束非常强。它意味着把一个圆变成椭圆把整个平面卷曲把网格某处挤密另一处放松这类操作都不是线性变换。平移也不是前面说过原点动了。线性变换能做的事被压缩在一个非常狭窄但非常有用的范围里——它只能对平面做均匀的拉伸、压缩、倾斜、旋转、投影这类整体一致的操作。理解了这条边界你就能立刻分辨出哪些场景能直接用矩阵描述哪些不能。比如相机成像里的透视投影严格来说不是线性的因为近大远小、不均匀压缩所以要先升到齐次坐标再处理而正交投影把一个三维点沿垂直方向拍到平面上是线性的可以直接写成矩阵。3. 用两列去哪了当尺子量出矩阵的几何性格3.1 二阶矩阵的五种基本性格拿到一个 2×2 矩阵先别急着算。看两列问自己两个问题这两个落脚点是不是还独立不共线它们各自把原本的基向量拉长、转向了多少这两个问题的答案组合起来就勾勒出这个矩阵的性格。下面这张表是我在给初学者讲课时常用的归类覆盖了绝大多数在工程里会见到的二阶变换变换类型典型矩阵两列的走向几何效果均匀缩放[[k, 0], [0, k]]两列同向拉长 k 倍整个平面同比放大或缩小非均匀缩放[[kx, 0], [0, ky]]两列各自拉长不同倍数横向纵向拉伸程度不同圆变椭圆旋转[[cosθ, -sinθ], [sinθ, cosθ]]两列转同一角度长度不变整体旋转形状不变剪切[[1, k], [0, 1]]第二列向上偏移 k把正方形推成平行四边形底边不动投影[[1, 0], [0, 0]]第二列塌缩到原点整个平面压到一条线上信息丢失看这张表的时候重点不是记住矩阵长什么样而是记住两列的走向决定一切。剪切矩阵最有意思——它不改变任何向量的 x 分量只给 y 分量加上 k 倍的 x。方格纸上的效果是每一列竖线整体向右上方推移但每一行横线原地不动。你想象一下把一叠扑克牌放在桌上按住最下面一张然后把最上面一张横向推出去中间那些牌跟着均匀错开那个形状就是剪切。3.2 行列式具体到面积的缩放因子线性变换里有个数叫行列式很多人会算但说不清它是什么。它的几何意义其实非常直观一个单位面积的小方块经过变换之后面积变成了原来的多少倍。回到基向量的落脚点。原本 e₁ 和 e₂ 张成的是边长 1 的正方形面积是 1。变换之后它们分别落到两列向量上这两列张成的是一个平行四边形。这个平行四边形的面积就是行列式的绝对值。所以算行列式的过程主对角线乘积减副对角线乘积本质上就是在算这个平行四边形的面积。拿旋转矩阵验证一下[[cosθ, -sinθ], [sinθ, cosθ]]行列式等于 cos²θ sin²θ 1。面积不变符合直觉旋转不该改面积。再看投影矩阵[[1, 0], [0, 0]]行列式等于 0。两个基向量的落脚点共线了张成的平行四边形被压成一条线段面积为零行列式自然为零。剪切矩阵[[1, k], [0, 1]]行列式等于 1面积也守恒——剪切虽然把正方形推成了平行四边形但底和高都没变面积确实没变。行列式的正负号则管的是定向。如果变换之后两个落脚点的相对位置从e₂ 在 e₁ 逆时针方向变成了e₂ 在 e₁ 顺时针方向说明整个平面被翻了个面像照镜子行列式就是负的。比如把 x 轴镜像翻转的矩阵[[-1, 0], [0, 1]]行列式是 -1面积大小没变但方向反了。行列式含义可逆性正值面积放大/缩小定向不变可逆负值面积放大/缩小定向翻转可逆零面积压成零维度塌缩不可逆提示行列式为零是信息丢失的信号。变换把高维压成了低维多个不同的输入被映射到同一个输出这种映射没法倒着做因为倒回去不知道原来是谁。3.3 从落脚点反推矩阵的实用技巧这个技巧在考试和工程里都用得上如果题目直接告诉你某个变换把 e₁ 搬到哪、把 e₂ 搬到哪那矩阵就写好了两列分别是这两个落脚点。举个例子有台机器把 e₁ 搬到(3, 1)把 e₂ 搬到(-1, 2)那矩阵就是[[3, -1], [1, 2]]。不需要解方程直接写。再比如题目说某个变换先水平拉长 2 倍再整体逆时针转 90 度你能不能直接写出矩阵可以但更稳妥的做法是分两步第一步的矩阵是[[2,0],[0,1]]第二步是[[0,-1],[1,0]]两者按顺序相乘就得到复合矩阵。这就引出了下一个话题——矩阵乘法为什么对应先做这个再做那个。4. 矩阵乘法不神秘它就是接着做下一件事4.1 从左往右读复合的顺序绝大多数人第一次看到矩阵乘法规则左边矩阵的每一行去点右边矩阵的每一列第一反应是这规则谁想出来的太别扭了。但如果从变换复合的角度看这套规则一点都不奇怪。假设你有两个变换先做 A再做 B。现在要找一个矩阵 M能一步完成这两件事。拿任意向量 v 走一遍先做 A 得到 Av再做 B 得到 B(Av)。所以 M v 要等于 B(Av)也就是 M BA。注意这里 B 写在左边A 写在右边先做的反而是右边那个。这是矩阵记号和阅读顺序不一致的地方也是最容易出错的地方。很多人栽在这一步。看着表达式BA直觉上觉得 B 先做其实 A 先做。我自己刚学的时候反复在这个顺序上翻车后来养成一个习惯把复合变换的表达式翻译成先做右边再做左边默念三遍再动笔。写代码的时候同理np.dot(B, A)是先应用 A 再应用 B不是反过来。4.2 顺序为什么不能交换如果 A 先做 B 后做和 B 先做 A 后做结果一样那两个矩阵就可交换。这种情况很少见绝大多数矩阵乘起来是不能调换顺序的。用几何想一下就明白了。先旋转 90 度再水平拉长 2 倍和先水平拉长 2 倍再旋转 90 度结果一样吗第一步实验先旋转把 e₁ 转到(0,1)、e₂ 转到(-1,0)再水平拉长把 x 分量乘以 2。此时 e₁ 落在(0,1)x 分量是 0乘以 2 还是(0,1)e₂ 落在(-1,0)x 分量是 -1乘以 2 变成(-2,0)。最终两列是(0,1)和(-2,0)。第二步实验先水平拉长e₁ 落在(2,0)、e₂ 落在(0,1)再旋转e₁ 从(2,0)转到(0,2)e₂ 从(0,1)转到(-1,0)。最终两列是(0,2)和(-1,0)。两组落脚点完全不同。第一个实验里第二列被拉长到了(-2,0)第二个实验里第一列被拉长到了(0,2)——拉长作用到的对象不一样结果自然不同。这就是不可交换的几何来源你的操作作用在谁身上取决于它前面已经发生了什么。顺序第一步第二步结果矩阵先转后拉旋转 90°水平拉长 2 倍[[0, -2], [1, 0]]先拉后转水平拉长 2 倍旋转 90°[[0, -1], [2, 0]]注意一旦你在代码里写复合变换务必对照这个表格确认顺序。图形学里模型矩阵通常按缩放、旋转、平移从右往左书写写反了模型会变形得很诡异而且不容易一眼看出问题。4.3 逆变换和它的存在条件既然有做一件事就有把这件事撤销。撤销 A 的变换叫 A 的逆记作 A⁻¹它满足 A⁻¹A I单位变换什么都不改。逆的几何意义是把所有落脚点搬回原位。但并不是所有变换都能撤销。前面说的投影矩阵把整个平面压到了一条线上多个不同的输入所有 y 分量不同的向量都落到了同一个输出上撤销的时候你根本不知道原来 y 分量是多少信息已经裂了。这种变换没有逆对应的矩阵是奇异的行列式为零。能撤销的条件是两列落脚点必须互相独立不共线。只要两列不共线它们张成的平行四边形就有非零面积整个映射就是一对一的每个输出都对应唯一输入逆就存在。这就是为什么教材反复强调行列式不为零等价于可逆——它其实就是两列不共线的另一个说法。几何上还有个漂亮的对称性逆矩阵的两列就是把落脚点搬回原位的那个变换的落脚点。如果 A 把 e₁ 送到(2, 0)那 A⁻¹ 就要把(2, 0)送回到(1, 0)所以 A⁻¹ 的第一列就是(0.5, 0)。算逆矩阵的公式看起来很繁但它干的事就这一件。5. 特征向量变换里不转向的那些方向5.1 特征值和特征向量的几何含义理解了矩阵是变换之后特征值这个概念就有了非常具体的画面。特征向量是那些被变换之后方向不变的向量特征值是这个向量被拉长或缩短的倍数。公式Av λv读起来是把变换 A 作用在 v 上结果等于把 v 直接乘一个数 λ。也就是说v 经过变换之后方向不动λ 为正时同向λ 为负时反向只是长度变了 λ 倍λ 小于 1 就是缩短大于 1 就是拉长。拿水平拉长 2 倍、纵向不变的矩阵[[2,0],[0,1]]当例子。这个变换显然不会改变水平方向向量的方向也不会改变竖直方向向量的方向所以 e₁ 和 e₂ 是两个特征向量对应的特征值分别是 2 和 1。落在两个轴之间的向量比如(1,1)会被拉到(2,1)方向偏了所以它不是特征向量。特征向量在实际问题里极其有用因为它把一个复杂的、多方向耦合的变换简化成了沿某几个特定方向的单纯拉伸。数据科学里做降维本质就是找数据分布的主方向而这些主方向正是某种协方差矩阵的特征向量结构力学里算振动模态也是在找特征向量——那些让整个结构按固定频率整体摆动的形状。5.2 为什么旋转矩阵没有实特征向量有意思的是有些矩阵找不到任何实特征向量。最典型的就是旋转 90 度的矩阵[[0,-1],[1,0]]。试着找一个方向吧。你随便画一个箭头旋转 90 度之后它一定指向了别处绝不会和原来同向除非这个箭头是零向量。既然所有非零向量都被转了向那这个矩阵就没有实特征向量。它的特征值是虚数 ±i正好对应转了 90 度这件事的数学本质——虚数单位代表一个 90 度的相位旋转。这个例子提醒我们特征向量存在与否是一个几何性质。旋转、螺旋这类带旋转成分的变换如果角度不是 0 或 180 度就找不到实特征方向。而在工程里遇到这种情况往往意味着系统的状态在振荡而不是纯增长或纯衰减。5.3 手算一个特征向量的完整流程以A [[3, 1], [0, 2]]为例走一遍。先算特征值det(A - λI) (3-λ)(2-λ) - 0 0解得 λ 3 和 λ 2。然后求 λ 3 的特征向量。代入(A - 3I)v 0[[0, 1], [0, -1]] · [[x], [y]] [[0], [0]]第一个方程给出 y 0x 随便取。所以属于 λ 3 的特征向量是(1, 0)也就是水平方向。再求 λ 2 的特征向量。代入(A - 2I)v 0[[1, 1], [0, 0]] · [[x], [y]] [[0], [0]]方程给出 x y 0也就是 y -x特征向量是(1, -1)。手工验证一下A 作用在(1, -1)上等于(3·1 1·(-1), 0 2·(-1)) (2, -2)正好是(1, -1)的 2 倍方向没变长度翻倍正确。这个矩阵本质上是在两个斜方向上分别做不同倍数的拉伸特征向量就是那两个方向。5.4 用代码把特征向量画出来纸上算容易丢几何直觉我习惯用 Python 快速画一遍。下面这段代码就是上面那个例子import numpy as np import matplotlib.pyplot as plt A np.array([[3, 1], [0, 2]]) vals, vecs np.linalg.eig(A) print(特征值:, vals) print(特征向量列:, vecs) origin np.zeros((2, 2)) plt.quiver(*origin, *vecs, color[r, b], anglesxy, scale_unitsxy, scale1) plt.axis(equal) plt.grid(True) plt.show()跑完之后你会看到两个箭头指向两个不同方向再用 A 去乘它们发现它们只是被拉长而没有转向。这种亲眼看到的效果比看十遍公式管用。我建议你把 A 换成旋转矩阵再跑一遍会看到特征值是复数画不出实方向印象会非常深刻。6. 核与像看清变换到底丢了多少信息6.1 零空间是被压扁的方向集合承接前面投影矩阵的话题。投影矩阵[[1,0],[0,0]]把所有竖直方向的向量都压成了零向量——(0, 5)经过变换变成(0, 0)。所有被送到零点的向量构成了一个集合这个集合叫核也叫零空间。核抓住了变换中信息丢失的部分。落在核里的向量你没法从输出中恢复因为它们全都变成了零输出里没有留下它们的任何痕迹。核越大丢失的信息越多。核有个好处它本身也是一个子空间一堆方向加起来的封闭集合。对上面那个投影矩阵来说核就是整条 y 轴所有形如(0, y)的向量都在里面。而且只要核里有一个非零向量这个矩阵就必然不可逆——因为它至少把某个非零向量和零向量映射到了同一个结果上。6.2 秩就是输出空间的维度变换之后所有输出落在哪个范围里这个范围叫像空间。它是所有可能输出的集合。像空间的维度就是秩。投影矩阵把整个平面拍到了一条 x 轴上所以它的像空间是一条线维度是 1秩就是 1。旋转矩阵把平面转到别处像空间还是整个平面维度是 2秩是 2。核和秩之间有一个特别优雅的关系叫秩-零化度定理核的维度加上秩永远等于输入空间的维度。放在二维平面里就是被压 cero 掉的维度 保留下来的维度 2。投影矩阵丢掉了一个维度竖直方向被压掉保住了一个维度水平方向还在1 1 2平衡。矩阵秩核维度输出形状可逆性[[2,0],[0,2]]20整个平面可逆[[1,0],[0,0]]11一条线不可逆[[0,0],[0,0]]02一个点不可逆[[0,-1],[1,0]]20整个平面可逆这张表几乎是我眼里线性代数最核心的一张对照表秩、核、行列式、可逆性四个概念其实说的是同一件事的不同侧面。行列式为零 ⟺ 秩不满 ⟺ 核里有非零向量 ⟺ 不可逆。你把这四句话刻在脑子里遇到任何矩阵都能立刻判断它的健康状态。6.3 一个来自实际场景的例子举个我实际碰到的场景。在做数据预处理的时候如果特征之间存在严格的线性关系比如一列是另外两列相加那么把这批数据乘上一个矩阵做变换时整个数据集会被压扁到一个更低维的子空间里。从秩的角度看就是数据矩阵的秩小于列数核非平凡。后果是什么后续要解方程求参数的时候方程会无解或者有无穷多解数值计算会不稳定甚至报错。解决思路通常有两种一是找出核的方向也就是哪些特征组合是冗余的手动删掉二是用正则化手段在损失函数里加一个惩罚项把解推向数值稳定的方向。这两种做法背后都是核和秩的概念在撑着。如果你不理解核的几何意义看这些方法的文档就只能死记硬背。7. 把直觉从二维搬到三维和更高维7.1 三维里我们还能看见什么三维线性变换的几何图像依然可以延续只是画起来费劲一点。3×3 矩阵的三列就是三个基向量在变换后的落脚点。原来三个互相垂直的单位向量张成一个单位立方体变换之后变成一个平行六面体这个平行六面体的体积就是行列式的大小。三维里能做的操作和二维对应缩放、旋转、剪切还多了一类——投影到某个平面或者某条直线上。三维旋转比二维复杂因为旋转轴可以指向任意方向而不像二维只能绕垂直屏幕的那根轴转。真正在做三维建模的时候一次旋转通常会被分解成绕 x 轴、y 轴、z 轴分别转一点点再复合起来这样写矩阵比较方便也容易理解。秩在三维里同样好理解。如果三个落脚点共面了说明整个三维空间被压成了一个平面秩就是 2行列式为零。如果三个落脚点共线了秩就是 1空间被压成了一条线如果全都塌到原点秩就是 0。7.2 高维为什么只能靠代数四维以上我们就没法在脑子里直接画出图像了。但这不代表直觉失效而是直觉需要翻译成可操作的代数判据。前面总结的那几条对应关系在高维依然成立几何直觉低维高维代数判据落脚点是否共线/共面列向量线性相关还是无关整体有没有被压塌行列式是否为零 / 秩是否满变换能不能撤销矩阵是否可逆有没有不转向的方向是否有实特征值我在处理高维数据的时候就是靠这张翻译表来维持直觉的。我看不见一千维的空间长什么样但我知道秩等于列数意味着数据没有被压塌条件数很大意味着变换在某些方向上拉得特别夸张、近似于塌缩。这些判断都不需要真的画出图但它们的几何含义和二维里画方格纸时感受到的东西是一回事。7.3 维度灾难和拉得特别扁的矩阵高维还有一个低维体会不到的现象一个看起来很正常的矩阵在某些方向上可能把空间拉得极其夸张在另一些方向上压得极其扁。这种拉伸比用条件数来衡量等于最大奇异值和最小奇异值的比值。条件数大了会怎么样假设输入数据里有一点点噪声这个噪声如果恰好落在被放大很多倍的方向上输出就会被放大到面目全非。数值计算里管这叫病态问题。我在做回归的时候遇到过一次系数矩阵条件数到了上千解出来的参数完全没法用改用一个微小的正则项把条件数压下来结果立刻就稳定了。这件事的几何解释是原本近似共线的两个落脚点被强行推正了一点点从近乎塌缩变成了有明确的方向。所以高维线性变换的核心功课其实不是把公式背熟而是养成一种习惯拿到任何矩阵先问它的落脚点是否独立、行列式正不正、有没有接近塌缩的方向。这几个问题答完你对它做什么、能不能信、会不会出问题心里就有谱了。8. 我个人在这块内容上反复踩过的几个坑学线性变换这些年有几个误区我踩得特别深写出来给后来的人省点时间。第一个坑是把矩阵乘法的顺序当成阅读顺序。前面提过表达式BA是先做 A 后做 B。这个坑我在写图形变换代码的时候反复栽因为代码里看起来是B 在前结果渲染出来的模型方向全错。后来我强制自己在每段复合变换代码旁边加一行注释写明从右往左读才慢慢改掉。第二个坑是把行列式当成一个没有意义的数。我早期做题就是死算算完也不会去解释它意味着什么。直到有一次看到行列式为零的矩阵导致程序报矩阵奇异的错误才意识到这个数背后是维度塌缩的物理信号。现在我拿到任何矩阵第一件事就是看行列式正的就正常负的就说明翻了面接近零的就提醒自己要警惕数值问题。第三个坑是以为特征向量只有对称矩阵才有。其实任何方阵都可能但不一定有实特征向量关键看几何上有没有不转向的方向。旋转矩阵没有实特征向量这个反例我记了很久因为它打破了我每个矩阵都有一组特征方向的错误印象。第四个坑是忽视核的重要性。一开始我只关心能不能算出结果不关心这个变换丢掉了什么。后来处理数据降维、解方程、做压缩的时候才明白核决定了哪些信息是找不回来的而这个往往是整个问题的关键约束。如果非要给一个上手建议拿方格纸拿几个具体的 2×2 矩阵一个一个画出来把基向量的落脚点描清楚把网格变形后的样子画出来再试着找出不转向的方向。画上二三十个你会发现自己看矩阵的眼光完全变了——它不再是一堆数字而是一个能动手操作的东西。后面再学三维、学高维、学奇异值分解都是在已经打好的这块地基上往上盖不会悬空。