小叶请AI协助整理一张校园示意图。原图把某栋建筑记在“向东50米、向北40米”的位置,新绘图程序却给同一栋建筑标上了坐标(2,1)。两组数字差这么多,是换算错了,还是它们本来就可以指向同一个地方?

只比较数字大小,回答不了这个问题。我们还需要知道:从哪里开始量,沿哪些方向量,每个方向上的一份长度是多少。坐标要和这些约定一起使用,才成为一份能还原对象的说明。

本章用这个问题理解维度、坐标与基,再把同样的思路移到多列数据、函数和AI的向量表示上。图中地点、数值及接口都是虚构的教学设定;我们只处理平面位置与位移,不讨论真实道路、绕障或地理测量误差。

一、一个向量,为什么不只有一组坐标

先区分位移和位移的写法

设校园示意图的原点为O,向东、向北为两个正方向,长度以米计。建筑位于P,从O到P的位移记作向量d。用旧图的坐标写,它是:

这里的两个数分别说明东向和北向的米数。画在纸上的箭头从O指到P,代表一段确定的位移;括号里的数字则是在当前约定下记录它的方法。之后若改变记录方法,首先要检查箭头是不是仍然指向同一地点。

我们平时觉得(50,40)已经足够,是因为默认了两个参考位移:向东1米、向北1米。把它们分别记为e₁和e₂,就有d=50e₁+40e₂。这个加法是在合成总位移:50份向东1米与40份向北1米,合起来是从O到P的位移。

e₁、e₂的顺序也属于约定。如果程序把第一项解释为北向、第二项解释为东向,那么原样提交(50,40)就会指到另一个地方。两个分量都保留下来了,不代表对象就保留下来了。这与上一章换轴时遇到的问题相通:数值必须和对应规则一起交接。

换两支参考箭头,仍然可以描述原来的位移

新程序采用另外两支参考箭头。它们用旧图的东、北米数写成:

第一支表示向东20米、向北10米;第二支表示向东10米、向北20米。它们都斜着指向东北,但倾斜程度不同。现在,取两份b₁,再加一份b₂,合起来仍然向东50米、向北40米。因此:

这就是新坐标(2,1)的含义:它记录的是用了多少份第一支参考位移、多少份第二支参考位移。这里的2和1是倍数,不能直接读成“向东2米、向北1米”。每一份已经包含了自己的长度和方向。

同一位移在东向北向参考与两支斜向参考下的表示
图 A03-01|同一位移在东向北向参考与两支斜向参考下的表示

图一:黑色箭头始终从O指向P。左图沿东、北分解,右图用两份b₁和一份b₂合成。参考箭头变了,目标位移没有变。

本例的参考箭头是表示工具,并不要求校园里真的有两条这样的路。画出“两份b₁加一份b₂”的折线,只是在展示位移相加;它没有自动证明沿线可以穿过建筑或绕开围墙。数学表示能回答位置是否相同,实际路线是否可走还需要地图上的通行条件。

此时,小叶已经能回答开篇的一半问题:两组坐标可以都正确。但要放心采用新程序的表示,还应进一步确认,这两支参考箭头是否能描述所有需要处理的位移,以及会不会出现同一位移有两份不同说明的问题。

二、张成空间:这些参考向量能表示哪些对象

线性组合不是只能做整份相加

把若干向量分别乘上系数再相加,叫作线性组合。在本章讨论的实数向量空间里,系数可以是整数、小数,也可以为负数。对于两支参考向量,一般写作a b₁+b b₂,其中a、b是实数。

正系数表示沿参考方向取相应倍数,负系数表示反向取相应倍数。半份b₁表示向东10米、向北5米;负一份b₂表示向西10米、向南20米。零系数则表示该项不贡献位移。允许这些系数,才能讨论参考向量在数学上究竟覆盖哪些方向和位置。

例如,小叶希望表示一段纯向东30米的位移。两支参考箭头都向东北,看起来似乎没法消除北向分量,但两份b₁减去一份b₂就能做到:北向贡献抵消,只留下东向30米。这里负系数承担的是抵消作用。它不是“出现了负长度的道路”,也没有要求实际行程必须先走两段再倒退一段。

如果某个具体任务规定两种动作只能执行非负整数次,可得到的结果就会少很多。这个动作集合与允许任意实数系数的线性组合不是一回事。分析基和维度时,我们先研究后一种数学表示;把结果用回任务时,再恢复非负、整数或可通行等现实约束。

一条参考方向,无论放大多少次仍只覆盖一条直线

张成空间是给定向量的所有线性组合组成的集合。给出这个集合,相当于说明:使用这几种参考位移,允许任意放大、缩小、反向和相加,到底能表示哪些总位移。

若只保留b₁,无论系数怎么改变,结果总在穿过原点的一条直线上。向东位移始终是向北位移的两倍。它能表示(20,10)、(40,20)、(-20,-10),却不能表示纯向北10米。它不是一支长度不够的箭头,而是少了一种改变方向的可能。

再增加一支(40,20),情况也不会改善。这支新箭头恰好是b₁的两倍。任意把两支箭头组合起来,最后仍等于某个倍数的b₁。参考向量数量从一支变成两支,能覆盖的集合却没有变大。

我们选用的b₂=(10,20)不同。它不在b₁所在的直线上。两者之间可以抵消北向,也可以抵消东向,从而构造出两个独立的平面方向。具体来说,2b₁−b₂给出纯东向30米,而2b₂−b₁给出纯北向30米;再按所需倍数缩放,就能组成任意东、北位移。

因此,b₁和b₂张成整个二维平面。这不是因为“有两支箭头,所以一定够”,而是因为它们共同提供了平面需要的两种独立变化。若两支箭头重合或反向共线,两支也仍然不够。

覆盖什么,需要先说清目标空间

这里的向量空间,可以先理解为一类能够做向量加法和实数倍乘、并且运算后仍留在其中的对象。所有平面位移构成一个向量空间。只取b₁所在的那条过原点直线,也构成其中一个更小的空间,称为子空间:直线上两个位移相加、任意倍乘,仍在同一条线上。

目标若是全部校园平面位移,只用b₁不够;目标若本来就只关心该直线上的位移,b₁完全可以胜任。于是“这组向量够不够”不能脱离范围。它必须被说成“是否足以表示这个空间中的所有对象”。

现实地图上的一条不经过原点的道路,通常不能直接当作这样的线性子空间:其中的位置相加可能不再落在道路上,也未必包含零向量。我们随后会用原点与位移来处理地点,不要求所有真实对象集合都硬套进线性空间的定义。

三、基:既要表示得全,也要表示得唯一

覆盖全部,还不足以形成一套明确的坐标

小叶又让AI增加第三支参考向量b₃=(30,30)。它恰好等于b₁+b₂。现在三支箭头仍能覆盖整个平面,但原来的位移d多了一种写法:

若坐标按(b₁,b₂,b₃)依次记录,那么(2,1,0)与(1,0,1)表示的是同一个位移。还可以给b₃增加任意倍数,同时从b₁、b₂中分别减去相同倍数,总位移不变。这样的三数记录可以用来表示位移,但表示并不唯一。

这对交接有什么影响?如果小叶看到两份文件中的系数不同,不能马上断定它们记录了不同地点;只看到某一个系数变化,也不能判断总位移是否改变,因为其他系数可能作了抵消的调整。第三支参考向量能由前两支合成,几个系数之间存在相互替代的余地。

线性无关,排除这种可以彼此替代的冗余

一组向量线性无关,是指只有把全部系数都取为零,才能把它们的线性组合合成零向量。若有一组并非全零的系数也能互相抵消到零,这组向量就线性相关。

为什么用“能不能合成零”判断?在三支箭头的例子里,b₁+b₂−b₃=0。这条关系指出了一种调整配方而不改变结果的方法:多加一份b₁和b₂,同时少一份b₃,总位移保持原样。零向量关系把冗余直接写了出来。

对于原来的b₁、b₂,却找不到这种非零调整。两支箭头不共线,沿一支产生的位移不能只用另一支完全抵消。若a b₁+b b₂=0,东、北两个方向都归零会迫使a和b同时为零。因此,它们线性无关。

基就是既能张成目标空间、又线性无关的一组向量。张成保证目标对象都能被表示,线性无关保证表示中没有这样的冗余。两项缺一不可。基的这个定义可核对代尔夫特理工大学的基与维数教材。

只给b₁,表示不全;给b₁与2b₁,仍然表示不全且存在冗余;给b₁、b₂、b₃,能够表示全平面却有冗余;给b₁、b₂,两方面都满足。这些不同情形比“基就是几根坐标轴”的图像更能帮助我们判断实际数据。

为什么一旦选定基,坐标就唯一

假设同一个位移真的有两组不同的基坐标。把第一组线性组合减去第二组,目标位移会抵消为零,剩下的是各系数之差与基向量的线性组合。

但基向量线性无关,合成零时所有系数都必须为零。因此,两组坐标对应位置上的差都必须为零,也就是两组坐标原来就相同。这说明:唯一性不是我们要求程序随便选一份结果,而是由基本身的性质保证的。

对于按顺序列出的基B=(b₁,b₂),可以把d的坐标写作。下标B指出使用哪组基,上标T表示这里将两个数排成一列;它们仍表示前面那两份与一份的合成。B的顺序必须固定;若改成(b₂,b₁),同一位移的坐标就应相应换成(1,2)。

“基不唯一”和“坐标唯一”并不冲突。一个平面可以选择许多不同的基;但给定其中某一组有序基以后,每个位移只对应一组坐标。两份坐标能否直接比较,要先看它们是否使用同一组基和同样的顺序。

四、维数:独立方向的数量,不总等于表格的列数

为什么换一组基,不会把平面变成三维

同一个有限维向量空间的各组基,所含向量的数量相同。这个数量称为该空间的维数。所有平面位移的基都有两支向量,所以维数为2;一条过原点直线的基只需一支非零向量,所以维数为1。只含零向量的空间不需要任何基向量,维数为0。

这个数量并不是由最初画了几条轴决定的。如果一个空间能由两支向量张成,空间中的任意第三支都可以由它们线性组合得到,不能作为额外的独立方向加入基。反过来,若两支真正独立的向量都需要表示,只保留一支也无法覆盖它们。基向量可以更换,“既不缺也不多”的数量却不会随命名改变。MIT关于线性无关、基与维数的第9讲也围绕这项关系展开。

新程序把(50,40)改写成(2,1),没有给校园增加一种空间方向;它只是换了两支参考向量。若再多写一个由原信息计算出来的分量,也不一定真的增加线性维数。

三个分量,可以只记录两种独立变化

小叶为地图数据增加一列“东向米数减去北向米数”。一条记录变成(x,y,x−y),于是建筑P的记录为(50,40,10)。文件里确实有三个数,但第三个数已经由前两个数确定。

把所有遵守这条规则的三分量向量放在一起,可写成:

这里R表示实数,x、y可以任意取值。W是三分量空间R³中的一个子空间:两条合规记录相加,第三项仍是前两项之差;整体乘一个实数,也仍满足同样关系。

W中的每一个向量都能拆为:

右边两支向量线性无关:组合结果的第一、第二分量分别等于两个系数,结果为零时,两个系数就都必须为零。它们又能表示W中的任意记录,因此组成W的一组基,W的维数是2。

三分量记录落在三维坐标中的一个二维平面上
图 A03-02|三分量记录落在三维坐标中的一个二维平面上

图二:三个坐标轴用于容纳记录,满足z=x−y的记录只落在其中的一个平面。图中的两支参考向量张成该平面,不会覆盖整个三维空间。

此时可以同时说“记录有三个分量”和“记录所在的线性子空间是二维的”。这两句话回答不同问题。前者说明存储格式,后者说明在已知关系约束下还需要几个独立坐标来确定记录。

如果只留下(x,y),并保留第三项的生成规则,就能完整恢复(x,y,x−y)。这是一种有依据的紧凑表示。若只留下(x−y),则不能完整恢复原记录:(50,40)和(20,10)都会得到10。少存一项有没有损失,要看剩下的记录及已知规则是否足以重构原对象。

一条曲线的参数数目,也不能直接代替线性维数

这里还有一个容易被“独立变化”说法遮住的区别。考虑另一种明确另设的表示:(t,t²)。虽然只要一个参数t就能生成一个点,但这些点组成的是一条抛物线,不是线性子空间。

例如,t=1给出(1,1)。把这个向量放大两倍得到(2,2),它却不在原曲线上,因为第一项为2时第二项应为4。沿曲线用一个参数描述,与允许任意线性组合后得到什么空间,是两个不同问题。

更具体地说,曲线上(1,1)和(-1,1)这两个向量已经不共线,它们的线性组合能张成整个平面。因此不能仅凭“生成数据只用了一个参数”就断定其线性张成空间只有一维。本章的维数指已经明确的线性空间的维数;后续讨论非线性特征时,还会遇到参数维数、数据所在曲面等其他口径。

所以看到AI输出“这是一个高维对象”,有用的追问是:这里在数向量的分量、数组的轴,还是某个线性空间的基向量?例如,一个100×3的表有两条数组轴,每行三个分量;若每行都满足上面的差值规则,它们仍位于那个二维子空间中。这三种数量可以各自成立,不必争出一个脱离对象的“真正维度”。

五、换基:先认清矩阵把哪种坐标变成哪种坐标

从新坐标还原位移

回到校园图。我们已知道b₁、b₂是一组基,现在把两支基向量按列排进一个矩阵,记为G:

矩阵的第一列是第一支参考位移,第二列是第二支参考位移;输入c中的第一项控制第一列的倍数,第二项控制第二列的倍数。输出的两项重新变成东、北方向的米数。这就是把线性组合写成矩阵乘法,在本例中它有清楚的转换方向:从新基的倍数坐标,回到旧图的东、北坐标。

输入(2,1),就还原出(50,40)。输入(1,0),应该还原出b₁本身;输入(0,1),应该还原出b₂本身。用这两个简单输入检查,比看到一个叫“坐标转换矩阵”的变量就直接采用更可靠:矩阵叫什么名字,并不能确定它的输入与输出约定。

本例把向量写成列,才采用Gc这样的乘法。若某个程序把每条记录放在一行,批量运算的写法会相应改变。不要一边借用列向量的公式,一边默认为代码中的每行记录可以照同样方向相乘。前一章学过的形状检查,在这里需要和转换含义一起使用。

从已知位移求新坐标

小叶通常遇到的是相反的问题:旧图的(50,40)已经给出,需要求新程序使用的倍数a、b。这时要找的是哪组系数能够满足Gc=d,而不是再把旧坐标乘一次G。

东、北两项要同时对应,因而得到:

两项约束共同确定a=2、b=1。它们要求的是两种参考位移的贡献合起来恰好到达目标:只满足东向距离、却没有同时满足北向距离,还没有找到正确坐标。

对一般的旧坐标(x,y),解同一组关系可得:

x、y在这里取以米记录的数值,a、b是参考位移的倍数。例如,保持目标的北向位置不变而向东移动,就需要增加b₁的贡献,同时减少b₂的贡献,使两者带来的北向变化相互抵消。两项公式共同做这件事;它们不是分别给东西、南北换一个更小的单位。

矩阵语言把反向转换记作c=G⁻¹d,其中G⁻¹叫作G的逆矩阵,满足先转换再转换回来能恢复原坐标。本例的逆矩阵为:

基向量恰好构成整个平面的一组基,因此这个二维方阵可逆。若把第二列改成第一列的两倍,它就无法恢复任意平面位移的唯一坐标:某些位移根本表示不了,能表示的位移又会有多组系数。可逆性在这里把“表示得全且唯一”集中到一个矩阵性质中。坐标与换基矩阵的约定可参见代尔夫特理工大学的换基说明。

让代码求解,再回到对象核对

理解反向转换,并不要求实际处理数据时都先手工展开逆矩阵。下面直接求解Gc=d,然后检查这组坐标是否能重构原位移:

可复制模板
import numpy as np

G = np.array([[20., 10.], [10., 20.]])
d = np.array([50., 40.])
c = np.linalg.solve(G, d)
print(c)                    # [2. 1.]
print(G @ c)                # [50. 40.]
print(np.allclose(G @ c, d)) # True

solve针对给出的线性方程求解,@表示矩阵乘法,allclose允许浮点数计算中的微小舍入差异。本例只是一组小方程;大型或不满足同样条件的问题还需要选择相应求解方法,不能看到这个函数名字就推断任何输入都有唯一解。NumPy的solve文档列出了其输入条件。

这里的重构核对有一个明确作用:检查代码交回的系数,乘上指定基以后是否回到给定目标。它不能替代对基和原点本身的确认。如果一开始就给错了地图约定,程序完全可能把那个错误约定计算得非常准确。

六、地点还需要原点:换基与搬动起点怎样配合

同样的两支参考向量,从另一个起点开始量

到目前为止,旧图与新图都从O开始量,因此我们只需讨论从O出发的位移。现在明确改变一个条件:新程序把原点设在O′,它在旧图中的位置是(10,−10),也就是从O向东10米、向南10米。建筑P的真实位置仍保持(50,40)。

新程序要记录的,是从O′到P的位移。相对于这个新起点,建筑在东向40米、北向50米的位置,因此应先求:

再用同样的b₁、b₂表示d′,得到d′=b₁+2b₂,所以新坐标应为(1,2)。先减原点,再求相对于新基的系数,两步各自解决一个问题:前一步确定从哪里开始的位移,后一步确定用什么参考位移表示它。

改变原点后,正确与错误坐标指向不同落点
图 A03-03|改变原点后,正确与错误坐标指向不同落点

图三:建筑P没有移动。新原点O′改变后,(1,2)能指回P;仍提交原来的(2,1),则会从新起点走向错误落点(60,30)。

如果AI忽略原点变化,继续交回(2,1),新程序会计算O′+2b₁+b₂,落到(60,30)。这个错误结果与目标的偏差,正好来自没有处理的原点变化。反复调整系数的小数位或重新保存文件,都不会自动解决它。

点坐标和两个点之间的位移,变化方式不同

设两个地点在旧图中分别为p、q,它们之间的位移是q−p。把原点同时移到o以后,两点坐标都要减去o,但相减时两个o会抵消。因此,仅仅更换原点不会改变两个地点之间的位移。

这也是为什么本章起初用位移介绍基:对于方向和长度的组合,不必每一步都携带某个地点的原点。等到要把位移落实成地图上的点,再把起点补回去。实际文件则必须明确记录的是“地点坐标”还是“位移分量”,否则同一个减原点操作可能被正确使用,也可能被多做一次。

这里的换基再加上固定的原点偏移,是一种仿射变换。固定偏移保留了新起点的位置,不能只靠基矩阵代替。

对本章的新图,把新坐标记为c′、旧图中的点坐标记为p,就有:

两条式子分别回答“怎样把新坐标落回旧图”和“怎样把旧图的点写成新坐标”。o、p和G的列都用旧图的东、北米制约定,只有c′表示新基的倍数。把这层对应交代清楚,比单独背一个带减号和逆矩阵的公式更有用。

七、基有很多种,为什么有的更好用

改变参考尺度,会改变系数,却不会改变对象

小叶把第一支参考向量加长为原来的两倍,改用b₁′=(40,20),第二支仍为b₂=(10,20)。在不改变原点的前提下,原位移d=(50,40)现在只需要一份b₁′加一份b₂,坐标从(2,1)变成(1,1)。

对象没有缩小,空间也没有降维;只是同一种贡献换成了更大的一份。这个例子提醒我们,某个坐标分量很大,不一定意味着对应影响就很大。系数与基向量的尺度要一起看。仅改变参考向量的长度,就能让相同对象的系数数值变大或变小。

同样,不能不看基,就把两个坐标的平方和开平方后当作地图上的米制距离。原来的东向1米与北向1米互相垂直、长度又相同,常用距离公式恰好与这组参考相配。斜向且较长的b₁、b₂并不满足同样约定。距离怎样随基一起表达,后面的内积与范数章节会进一步说明。

合法的基,也可能把小误差放大成明显的系数变化

再看一个另设的小例子,仍以米为长度单位。两支参考位移是u=(1,1)、v=(1,1.001)。它们并不完全共线,因此在数学上构成平面的一组基,但方向几乎相同。

目标位移为(2,2.001)时,坐标是(1,1),两支参考各取一份。若目标的北向读数只增加0.001米,变成(2,2.002),坐标就会成为(0,2):第一支从一份变成零份,第二支从一份变成两份。

为何原位移只变了很小一点,配方却变化明显?因为两支参考位移提供的东向贡献完全一样,北向贡献也几乎一样。要把总位移稍微推向其中一侧,需要用一支大幅替换另一支,保留共同部分,再利用它们之间很小的差别。

这并没有推翻坐标唯一性:每个精确给定的目标仍有唯一坐标。它说明“存在唯一解”和“有微小测量误差时结果仍稳定”是两种要求。真实数据有噪声时,选择几乎重复的参考方向可能让系数难以解释。当前例子只显示这种敏感性,不需要先学完整的数值分析课程才能看见问题。

合适的基,可以让任务关心的关系更直接

选择基也可以帮助解释。假设小叶想比较一张图中两个位置的亮度,暂用两个数(8,6)作虚构示例。用标准基时,两个坐标分别是两个位置的读数;若改用(1,1)与(1,−1)作为参考,就得到:

第一项给两个位置同时增加相同的量,第二项则让一个位置增、另一个位置减。新坐标(7,1)直接分开了共同亮度水平和两个位置之间的差异。它没有新测量任何亮度,只是把原来两数中已有的关系组织得更便于观察。

如果当前任务关心两处共同的亮度水平及两者的差异,这种写法可能比逐个盯着8和6更直接;若任务只需原样显示两个像素,原坐标可能就更方便。基的选择要对照需要完成的判断,不是越斜、越复杂或越抽象就越先进。

八、函数也能有坐标:不是所有基都画成空间箭头

前面的对象都写成有限个数,容易让人误以为线性代数只处理数表。实际上,只要对象能按明确规则相加和倍乘,并构成相应的向量空间,也可以讨论基和坐标。函数就是一个重要例子。

设小叶用一个简单趋势模型记录某项评分随时间的变化。把时间按一天为单位写成数值t,评分模型设为f(t)=3+2t。这只是教学模型,不宣称真实评分总沿直线变化;本节关心的是怎样完整描述同一个函数。

考虑所有形如a+bt的函数。把常数函数1和函数t作为两个参考对象,那么f的坐标就是(3,2)。第一项确定整体高度,第二项确定每天变化多少。函数之间的加法是在每个相同t处把函数值相加;倍乘则把每个t处的函数值一起乘上相应系数。

这两个函数为什么能构成基?它们的线性组合覆盖所有a+bt;若a+bt对所有t都等于零,先看t=0可知a=0,再看t=1可知b=0,所以也没有非零组合能得到零函数。覆盖与线性无关这两项标准没有变,只是参考向量现在成了函数。

注意,我们描述的是整条函数规则,包含所有允许t上的值,不是只存了两个观测样本。它虽然对应无穷多个输入时刻,却在这个模型范围内只需两个独立系数。有限维数不等于对象只在有限个地方有取值。

现在改用函数1与t−1作为参考。将时间从第1天附近来理解,同一个函数可写成:

所以坐标从(3,2)变成(5,2)。原来第一项是t=0时的模型值,现在第一项是t=1时的模型值;每天增加2分的关系保持不变。分别代入t=0与t=1,都得到原来的3与5。

若小叶忘记这次参考函数的改变,把旧系数(3,2)原样放到新基下,得到的就会是3+2(t−1)=1+2t,整条函数都比原来低2分。这和地图交接中的错误相似:系数未必能离开它原来的参考对象直接复用。

如果模型允许二次项a+bt+ct²,就需要增加t²这一种不能由1和t线性组合得到的变化,空间维数变成3。这里的变化来自扩大可表示的函数范围。它与仅把3+2t改写成5+2(t−1)有本质区别:后者只换坐标,前者允许了原来无法表示的弯曲趋势。是否值得采用更复杂模型,还要由数据和任务判断,不能只由“多了一维”得出效果更好的结论。

九、把坐标意识带进AI的向量表示

长度相同,只说明数的个数相同

在语义检索中,可以把查询和资料转成向量,再按既定规则比较它们。Sentence Transformers的语义检索文档展示了查询编码、资料编码和向量比较的基本过程。使用者看到的常常只是一串数字;但这些数字能相互比较,依赖的是编码方式与后续比较规则彼此兼容。

用一个完全人为的两分量例子看这个关系。假设某套表示把查询写成q=(1,0),匹配资料写成a=(1,0),另一份资料写成b=(0,1)。我们先只做最简单的检查:q与a完全相同,与b不同。

现在把全部向量的两个坐标位置统一交换。查询变成q′=(0,1),资料变成a′=(0,1)、b′=(1,0)。查询仍与应匹配资料相同。它们的共同约定变了,原来的对应关系保留下来了。

如果只换资料库的表示,查询仍保留q=(1,0),却拿它与a′、b′比较,就会发现它反而与b′完全相同。所有向量仍然有两个数,程序也完全可以继续运算,但混用坐标约定已经改变了判断。

真实向量检索当然比这个例子复杂,通常也不是只判断数值是否完全相等。例子只用最直观的对应,显示一种基本风险:分量数量相同,不足以证明两份表示可以直接混用。更换编码器、预处理或表示方式时,应确认查询与资料两端使用的是配套方案,并用已知对应样本检查结果。

不要把一个分量的位置,当作已经找到了一种意义

地图的基向量由小叶明确指定,所以每个坐标倍数都能解释成具体位移。AI生成的表示未必有这样的手工约定。若工具没有给出可靠的解释,不能只因为向量第一个位置有一个数,就把它命名为“逻辑程度”,再把第二个位置命名为“创造力程度”。

即便一个玩具系统最初真的这样命名,重新混合坐标后,同样的信息也可能分布到多个分量中。一个概念可以需要若干方向共同表示,一个方向也可以参与多个判断。坐标是一种表示方式;单个位置是否对应可读意义,还需要额外的定义或证据。

本章的换基也不能被扩大成“任意两个AI模型只差一个可逆矩阵”。两个系统可能保留了不同信息,采用了不同的非线性处理,甚至根本没有给出逐对象对应关系。只有确认同一对象空间和可逆线性关系等条件时,才适合用换基来描述它们的区别。前面的两轴交换是一个明确构造的例子,不是对真实模型结构的推断。

减少坐标与增加能力,是另外两件事

回看(x,y,x−y)的例子,第三个数可从前两个恢复,因此去掉它不损失该规则下的信息。若换成一份确有三个独立变化的记录,却只留下两个数,就不能靠“换基”这个名字保证完整可恢复。换基是在同一空间里更换表示;把多个对象压到同一份记录上,则已经丢掉了它们之间的区别。

同样,给记录增加重复项、改变尺度或把坐标拆得更细,也不能直接证明系统获得了更多认识世界的能力。是否多记录了此前没有的区别、是否更便于当前任务使用,需要分别判断。后面的投影、降维和特征构造章节会把这些问题进一步展开。

小叶因此不必见到一个长向量就先尝试解释每个位置,也不必先学完全部模型算法才能使用工具。他可以从当前任务实际需要的对应开始:哪些对象应该保持相同,哪些应该被区分,表示改变以后这些关系是否仍成立。基与坐标提供的是检查这些约定的思路。

十、完成这次地图数据交接

现在回到已经改变原点的新程序。最终要求明确为:原点在旧图的(10,−10),第一支基是(20,10),第二支基是(10,20),两列仍用旧图的东、北米数表示。目标建筑在旧图的(50,40),新程序接收按这两支基依次记录的倍数。

小叶先将地点变成相对于新原点的位移,再求坐标,并把结果落回旧图核对:

可复制模板
origin = np.array([10., -10.])
point = np.array([50., 40.])
new_coordinates = np.linalg.solve(G, point - origin)
restored_point = origin + G @ new_coordinates
print(new_coordinates)       # [1. 2.]
print(restored_point)        # [50. 40.]

这次交给新程序的是(1,2)。原来的(2,1)并非数学上从来错误,而是属于原点尚未移动时的另一套地点记录约定。把两次条件分开,就不必在两组答案之间凭数字是否整齐来猜测。

小叶还可以用两个简单基准点检查接口:旧图中的(30,0)=O′+b₁应得到新坐标(1,0),(20,10)=O′+b₂应得到(0,1),新原点自身应得到(0,0)。它们分别对应从哪里开始、第一支参考是什么、第二支参考是什么,能直接发现约定是否交错。

这些数学核对完成以后,小叶可以把转换后的坐标连同地点编号、原点、基向量顺序和旧坐标单位一起交给绘图程序,再检查标注是否落回目标地点。若还要生成实际步行路线,则继续使用道路与障碍信息;本章没有通过坐标正确替代那项判断。

从这次交接中,我们得到的不只是一个变换公式。张成空间说明可表示的范围,线性无关排除可替代的冗余,基使每个对象有唯一坐标,维数记录这种表示需要的独立方向数量。换基与更换原点则告诉我们,在记录方式改变时,如何把同一对象准确接回去。这些知识在地图上看得见,在函数和AI向量里也同样有用。

十一、练习与参考分析

练习一:检查列与坐标的对应

小叶在另一个二维教学例子中选取u=(2,1)、v=(3,1),所有分量都是同一旧坐标系中的数值。向量d=(9,4)相对于有序基(u,v)的坐标是什么?把基向量排成矩阵时,哪一列放u?若改用有序基(v,u),坐标怎样改变?

参考分析: 要求的是a u+b v=d,即2a+3b=9、a+b=4,解得a=3、b=1。矩阵应按列放参考向量,写成[[2,3],[1,1]],输入(3,1)后得到(9,4)。

若只交换基的顺序,坐标就改成(1,3),向量本身不变。检查第一列是否正确,最直接的办法是输入(1,0):输出应为u。这里的重点是系数与列的对应,不是要求把矩阵外形背成固定图片。若程序采用行向量表示,应另按其约定组织运算。

练习二:同样三项,可能是冗余,也可能是必要方向

在三分量空间中,有u=(1,0,1)、v=(0,1,−1)、w=(1,1,0)。这三支向量是否构成整个R³的一组基?它们张成的空间维数是多少?若把w换成k=(0,0,1),结论是否改变?

参考分析: w=u+v,所以前三支存在非零关系u+v−w=0,不线性无关。它们始终满足第三项等于第一项减第二项,无法表示(0,0,1),也就不能覆盖整个R³。

u与v独立并且已经覆盖三支向量的全部线性组合,因此原张成空间的维数是2。加入w只是增加一支可由已有两支表示的向量,没有增加独立方向。

改成u、v、k后,任意(x,y,z)都能写成x u+y v+(z−x+y)k。前两项确定前两个系数,第三项再确定最后一个系数,表示唯一。因此这组三支向量是R³的一组基,空间维数为3。这里增加的是原平面以外的方向,变化有实际依据。

练习三:补一列就升维,删一列就丢信息吗

某份数据每行原来是(x,y),小叶加入第三列2x+y,改为(x,y,2x+y)。AI判断:“列数从2变成3,独立信息增加;现在若删掉任何一列,都会丢掉信息。”分别评价这两句话,并给出一个确实无法恢复原记录的删列方式。

参考分析: 新列由旧列确定,全部记录位于二维子空间中,可用(1,0,2)、(0,1,1)作基。存储分量增加,不等于独立变化增加。

若保留x、y,第三项当然可以恢复;若保留x与第三项z,能由y=z−2x恢复;若保留y与z,能由x=(z−y)/2恢复。因此,在本题精确规则已知的条件下,删除任意一列都可以恢复,并非一定丢失。

若只保留第三项,就不够:(1,0)与(0,2)都得到2,无法分辨原来是哪条记录。判断信息损失要问能否重构原对象,而不是把“多一列”“少一列”直接当成结论。现实里若第三列包含独立测量误差,题设的精确关系就已经改变,需要重新分析。

练习四:只换原点,还是原点与基一起换

仍用正文的G矩阵,新原点在旧图中的位置为(10,−10)。有两个旧图地点p=(30,0)、q=(20,10)。求它们的新坐标,并用新坐标差重构从p到q的旧图位移。重构位移时还要不要加一次原点?

参考分析: p−o=(20,10)=b₁,所以p的新坐标是(1,0);q−o=(10,20)=b₂,所以q的新坐标是(0,1)。新坐标之差为(−1,1),乘G得到−b₁+b₂=(−10,10),与旧图直接计算q−p相同。

这里重构的是两个地点之间的位移,不再加原点。原点已经在两点相减时抵消。若又加上(10,−10),会得到(0,0),错误地把两个不同地点之间的位移变成零。这个反例能帮助检查程序是否混用了地点坐标和位移。

练习五:函数坐标变了,函数有没有变

设g(t)=4−3t,讨论对象是所有a+bt形式的函数。它在有序基(1,t)和(1,t−2)下的坐标分别是什么?如果在新基下仍使用旧系数,会得到什么函数?选一处时间值核对。

参考分析: 在(1,t)下,坐标是(4,−3)。要改写成A+B(t−2),需保持斜率B=−3,同时A+6=4,因此A=−2。新坐标为(−2,−3),表示g(t)=−2−3(t−2),两种写法对所有t相同。

若误用旧系数,就得到4−3(t−2)=10−3t,比原函数高6。在t=2处,正确模型值是−2,错误写法却给出4。新基第一项的作用是确定t=2处的值,已经不同于旧基第一项确定t=0处的值。坐标数值的意义改变了,不能只因函数形式仍是直线就照搬。

练习六:两份三分量表示,能否直接比较

旧系统将查询与匹配资料都记为(1,2,0),另一份资料为(0,1,2)。新系统把每个向量的分量从(x,y,z)统一改为(z,x,y)。小叶只重建了资料库,查询仍用旧表示。用“与查询完全相同”的简化检查会发生什么?这能否证明真实系统的任何升级都只需交换坐标位置?

参考分析: 新资料库里,原匹配资料变成(0,1,2),另一份资料变成(2,0,1),都与旧查询(1,2,0)不同。简化检查会找不到原来那个完全匹配的向量;题设没有保证一定误认成另一份,不能把正文两分量例子的结论机械照搬。

将查询也按同一规则变成(0,1,2),它就重新与应匹配资料相同。问题来自两端约定混用,分量数量相同并不能避免这种错配。

本题的交换关系是明确给定的,所以可以按这个规则恢复兼容。真实系统升级若改变了编码方法或保留的信息,未必存在这样的简单交换,更未必存在可逆线性关系。应先确认配套编码和实际任务表现;不能把一个构造例子当成任何模型间转换的通用证明。