ALG09|矩陣:把多個量與作用規則一起組織

適用入口/必要先備/範圍邊界

適用入口:11 年級數學 A。本篇以「列欄語意、線性組合、有序乘法」為共同骨架,再討論二階矩陣可以反向還原的條件。本文只處理實數元素的矩陣。

必要先備:能進行實數四則運算,理解分配律與代數式代入;能用代入或消去處理簡單的二元一次聯立方程式;能閱讀資料表的分類、順序與單位。閱讀電腦示範時,需要會在已備妥的環境中貼上、執行及保存程式,但不要求先學過程式設計。矩陣、單位矩陣及二階反矩陣的必要觀念,都在本文內建立。

範圍邊界:資料表示與線性組合不限定為方陣;核心乘法示例是一個 2×3 矩陣與一個 3×2 矩陣的指定有序乘積,完整求出四個分量。反矩陣的計算只處理 2×2 可逆情形。本文不另算核心示例的反序乘積,不練矩陣高次冪,不另設高階方陣的乘積計算,也不展開高階反矩陣、轉置運算、平面線性變換或轉移矩陣。課綱將反方陣的確切計算限制在二階,並把平面線性變換與二階轉移方陣另列於 F-11A-3;不能把這項限制誤讀成所有矩陣運算都只能使用二階方陣。國家教育研究院:數學領域課綱(107年6月)

閱讀後,你應能把資料表寫成矩陣並解釋指定元素,計算同型矩陣的線性組合,按照指定順序求出相容尺寸矩陣的乘積,求可逆二階矩陣的反矩陣並回查,以及保存電腦運算紀錄、人工說明至少一個輸出元素的來源。

一、把數字排進方括號,究竟增加了什麼?

看到矩陣,最容易產生的疑問是:這不就是一張沒有表格線的數字表嗎?既然每一格最後仍然要做加減乘除,為什麼值得另學一套運算?

這個疑問抓住了一半的事實。矩陣沒有取消原來的算術,也不是在它出現以前,人們就不會處理多個未知數。矩陣代數形成以前,線性方程與行列式已經是數學研究的一部分;不能把「後來形成新的整體表示」說成「以前沒有有效方法」。MIMS EPrints

以十九世紀的一個代表節點來看:Arthur Cayley 在 1858 年的〈矩陣理論論文〉開頭,從一組線性方程式的簡寫引入矩陣,把分散在各條式子中的係數組織成一個整體,再研究這個整體如何相加、相乘與組合。他並不是先宣稱方程式無法計算,而是提出:一整組係數,也可以成為值得單獨運算與研究的數學對象。Archive.org

原有方法能做到什麼?我們可以逐條寫出關係,把前一組式子代入後一組式子,再利用分配律整理。這些方法依然正確。

不過,從表示方式來比較,當輸入、輸出和處理階段一起增加時,除了算術,還有一項工作必須一直做:追蹤「哪個係數屬於哪個量」「哪一組結果要交給下一組規則」。

矩陣增加的,不只是比較短的寫法,而是把這些位置關係固定下來,讓我們可以區分:

資料如何排列、同類資料如何合併,以及一組規則如何接到另一組資料或規則上。

下面用一個學校活動的教學情境說明。所有包裝內容與訂購數量都是為了講解而設定,不是歷史事件,也不是實際調查資料。我們會用它比較兩種表示方式,不把這個情境倒寫成矩陣的歷史發明原因。

二、一個元素不只是一個數,還有兩個位置

假設學校活動使用甲、乙、丙三種材料包,兩個班級的原始訂購表如下。

包別一班訂購數,單位:包二班訂購數,單位:包
甲包32
乙包41
丙包25

如果保留分類順序,把數字部分寫在方括號內,就得到

B=[324125].

本文採用臺灣數學課程手冊的名稱約定:

列是橫向的一排,對應英文 row;行是直向的一排,對應英文 column,也就是資料表常說的「欄」。〔來源:國家教育研究院數學領域課程手冊(114年1月),印刷第 576 頁〕

所以 B 有三列、兩行,是一個 3×2 矩陣,讀作「三乘二矩陣」。第一個數說明橫列有多少,第二個數說明直行有多少;它不是在要求先算 3×2=6,再把尺寸叫作「六階」。

在本文處理的實數範圍內,一個由實數按固定位置排成、具有 m 列與 n 行的長方形數表,稱為 m×n 矩陣,其中 m,n 是正整數。當 m=n 時,才是方陣;n×n 方陣又稱為 n 階方陣。

若把矩陣記為

A=[aij],

那麼 aij 表示第 i 列、第 j 行的元素,其中

1≤i≤m,1≤j≤n.

這兩個下標的先後不能交換。

回到訂購表,b32=5 的意思不是「第三十二個數」,而是:

先找第三列,也就是丙包;再找第二行,也就是二班。因此,它表示二班訂購五包丙包。

第一個下標指定橫列,第二個下標指定直行。b₃₂=5:丙包/二班,5包。
第一個下標指定橫列,第二個下標指定直行。b₃₂=5:丙包/二班,5包。

同樣地,

b12=2

表示二班訂購兩包甲包;它不是一班訂購兩包丙包,儘管表內確實也有那個數字。

這裡有一項重要限制:方括號會保留數字的位置,卻不會自動保留位置的現實意義。

如果有人把直行順序改成「二班、一班」,卻沒有一起更改標籤與使用規則,數字可能一個都沒抄錯,解讀卻已經錯了。因此,保存矩陣資料時,還要保存橫列名稱、直行名稱、排列順序及單位。

數學上,兩個矩陣相等,必須尺寸相同,而且每個相同位置的元素都相等。但作為現實資料,即使兩個矩陣在數學上相等,若它們使用不同的分類或單位,也未必是在記錄同一件事。

三、線性組合:相同位置,必須還在說同一件事

假設活動改辦兩次,每次都採用原來的訂購方案 B,那麼各項訂購數都變成原來的兩倍:

2B=[6482410].

這叫作矩陣的係數積:用一個數乘矩陣時,每個元素都乘上那個數。係數 2 不是只乘第一列,也不是只改矩陣的尺寸。

接著,兩次活動合計取消的包數記為

D=[100112].

這張表的橫列仍依序是甲包、乙包、丙包,直行仍依序是一班、二班,單位仍然是包。新的訂購方案因而是

L=2B−D.

逐格計算:

L=[2·3−12·2−02·4−02·1−12·2−12·5−2]=[548138].

例如右下角的 8,表示二班原本兩次共訂購 2·5=10 包丙包,取消兩包後,剩下八包。

這種由矩陣的係數積、加法與減法組成的式子,稱為矩陣的線性組合。若 B,D 都是 m×n 矩陣,α,β 是實數,則

(αB+βD)ij=αbij+βdij.

這個公式說的是:結果在第 i 列、第 j 行的數,由原來兩張表在相同位置的數來組成。

為什麼要求同型,也就是尺寸相同?因為不同尺寸的表,未必有完整的一一對應位置。即使尺寸相同,現實解釋仍須再過一關:那些位置是否代表相同的對象與相容的單位?

例如,若 D 的第一行其實是一張「二班取消數」表,直接計算 2B−D,就可能拿一班的需求去減二班的取消數。數學上的逐格相減做得出來,不代表它回答了正確的現實問題。

我們也可以把結果加回取消數,檢查是否回到原先的兩倍方案:

L+D=[548138]+[100112]=[6482410]=2B.

這個回查確認了本例的加減計算。但倘若一開始就把班級標籤弄反,純粹的加減回查未必會發現它。因此,算式回查與資料語意回查,是兩件都要做的事。

係數也可以是零或負數。例如,所有元素都是零的 3×2 矩陣記為 O3×2,則

0B=O3×2,B−B=O3×2.

零係數不會把矩陣的尺寸消掉。另一方面,線性組合在數學上允許得到負數或非整數;但在這個訂購情境中,若算出負的包數或不能拆分的零碎包數,就不能直接把它當成可執行的訂購方案。

四、矩陣乘法:不是同位置相乘,而是沿共同分類配對

接著回到原始訂購表 B,問另一個問題:每班需要多少支鉛筆、多少張卡紙?

假設三種材料包的內容如下,而且每包配方固定、不另外加贈材料。

材料每甲包含量每乙包含量每丙包含量
鉛筆,單位:支210
卡紙,單位:張103

把配方寫成矩陣:

A=[210103].

這次,橫列代表材料,直行代表包別。a12=1 表示每乙包有一支鉛筆;a13=0 則表示丙包不含鉛筆。這裡的零是確定的「沒有」,不是尚未調查的空缺值。

現在注意兩張表的接合處:A 的三個直行,依序是甲包、乙包、丙包;B 的三個橫列,也依序是甲包、乙包、丙包。

共同分類都是包別,而且順序一致。因此,我們可以把「每包需要多少材料」與「一共訂購多少包」配對。

先看一班的鉛筆需求。一班訂購三包甲包、四包乙包、兩包丙包,所以需要

2·3+1·4+0·2=10

支鉛筆。

每一項都有具體意義。例如

2 支/甲包×3 甲包=6 支.

三項相加時,相加的都已經是鉛筆支數,而不是把支數和包數混加。

這正是矩陣乘法在此處的規則:拿左側矩陣的一個橫列,與右側矩陣的一個直行,按相同的中間分類逐項相乘,再把結果加起來。

令

P=AB.

四個元素分別是

p11=2·3+1·4+0·2=10,p12=2·2+1·1+0·5=5,p21=1·3+0·4+3·2=9,p22=1·2+0·1+3·5=17.

因此

AB=[105917].

結果的橫列沿用 A 的材料分類,直行沿用 B 的班級分類。因此,一班需要十支鉛筆、九張卡紙;二班需要五支鉛筆、十七張卡紙。

結果矩陣的不同橫列可以記錄不同單位:第一列是鉛筆支數,第二列是卡紙張數。這不妨礙本例成立,因為每一格內部加總的各項,都已換成同一種材料的同一單位;我們沒有把兩列相加成一個含義不明的「材料總數」。

沿相同包別逐項相乘再加總。P=AB,p₂₂=17:二班需要17張卡紙。
沿相同包別逐項相乘再加總。P=AB,p₂₂=17:二班需要17張卡紙。
尺寸為什麼必須接得上?

A 是 2×3,B 是 3×2,所以

(2×3)(3×2)⟶2×2.

內側的兩個 3 必須相同,因為一個橫列取出的三個配方係數,要和一個直行取出的三個訂購數逐項配對。外側的 2 與 2,則分別留下兩種材料與兩個班級。

一般而言,若 A 是 m×n,B 是 n×r,則 AB 是 m×r,而

(AB)ij=ai1b1j+ai2b2j+⋯+ainbnj.

其中,i 指定左側矩陣的橫列,j 指定右側矩陣的直行;中間的位置 1,2,…,n 逐一配對。NumPy 的二維矩陣乘法也採用這個內側尺寸必須相等的規則。NumPy

但仍要記住:尺寸相容,只保證數字可以依規則配對;在應用中,中間分類的名稱、順序與單位也必須相容。

同一個乘積,也是在組合幾種基本配方

我們還可以從另一個方向理解一班的需求。

三種材料包各自的內容,是 A 的三個直行:

[21],[10],[03].

每個直行的上方都記鉛筆支數,下方都記卡紙張數。一班訂購三、四、兩包,便是把三種配方分別取三倍、四倍、兩倍,再逐位置相加:

3[21]+4[10]+2[03]=[109].

所以,矩陣乘法並不是和線性組合毫無關係的新口訣。AB 的每一個直行,都是按照 B 對應直行提供的係數,對 A 的各個直行作線性組合。

「橫列乘直行」告訴我們一格怎麼算;「配方的線性組合」則告訴我們,整個輸出為什麼應該這樣形成。

五、有序乘法:把規則接起來,不能任意調換前後

普通數的乘法可以交換,例如 2·3=3·2。但不要因此直接認定矩陣也可以任意交換。

本例的 AB,是在把 B 中各班的包數,交給 A 的材料配方處理。若把兩張表視為連接的作用規則,就是右側提供中間量,左側再處理那些量。

反過來寫,所接合的分類已經不同。本例即使只看數學尺寸,也能知道反序乘積會是 3×3,不會是我們需要的「兩種材料對兩個班級」的 2×2 結果。沒有必要另算它的各格,就已經能判斷它不是本題指定的輸出。

因此,正確說法不是「任何兩個矩陣換序後一定不同」,而是:

矩陣乘法沒有可以任意交換的保證;順序本身就是運算內容的一部分。

Cayley 在 1858 年的論文中,從連續兩組線性關係的代入說明矩陣乘法,並指出這種組合一般不具交換性。這不是為了讓運算變麻煩而增加的禁令,而是要忠實保留原來關係的先後。Archive.org

算出乘積後,我們得到的不只是一張答案表

假設完整照辦一班方案 s 次、二班方案 t 次,其中 s,t 是非負整數。從原始訂購表可知,三種包的總數依序是

3s+2t,4s+t,2s+5t.

若逐條代入配方,鉛筆需求是

2(3s+2t)+(4s+t)=10s+5t,

卡紙需求是

(3s+2t)+3(2s+5t)=9s+17t.

這裡的四個係數 10,5,9,17,恰好就是 AB 的四個元素。

原來,AB 不只保存這兩個班的一次答案,也把「先決定包數,再計算材料」合成了可以重複使用的規則。只要配方與方案內容不變,就可以利用這四個係數,處理不同的 s,t。當 s=t=0 時,兩項材料需求也都是零,符合沒有採用任何方案的情況。

逐條代入當然也能得到相同結果。把算式寫成矩陣,不會憑空取消首次求出四個元素所需的乘加工作。它改善的是另一個層次:

把反覆出現的配對方式變成統一規則,讓整組資料與整組作用可以一起表示、組合、檢查和重用。

這也說明矩陣代數形成時的一項改變:研究者不只問「這組未知數是多少」,也能把一整組係數當成對象,研究其加法、組合、單位作用與逆向作用。Cayley 的原論文確實逐項建立了這些運算關係。Archive.org

不過,理論提出不等於立即普及。Nicholas Higham 在討論早期矩陣理論的書評中,引述 Tony Crilly 的研究指出,Cayley 的這篇論文起初並未獲得相稱的後續發展。不能把今天的使用規模倒寫成當時已經發生的影響。MIMS EPrints

六、反矩陣:不是每一組作用都能倒回去

前面一直在做正向工作:知道各種包數,求材料總量。

現在反過來:只知道材料總量,能不能還原原先的包數?

先把問題限制清楚。另一次活動只使用甲包與乙包,不使用丙包,配方仍然是甲包兩支鉛筆、一張卡紙,乙包一支鉛筆、不含卡紙。配方矩陣因此是

M=[2110].

若甲包有 x 包、乙包有 y 包,鉛筆總數為 u,卡紙總數為 v,則

u=2x+y,v=x.

利用原有的代入方法,立刻得到

x=v,y=u−2v.

這已經是一套反向規則:從材料總量回到包數,而且不必每換一組總量,就重新設計解法。

寫成矩陣形式,就是

[xy]=[011−2][uv].

這張反向規則表,便是 M 的反矩陣,記為 M−1,也稱為反方陣。

什麼才算真的「還原」?

二階單位矩陣定義為

I2=[1001].

它的作用是不改變原來的兩個量:

I2[xy]=[xy].

所以,反矩陣不能只是針對某一組數字碰巧算回去。它必須與原矩陣互相組合後,得到不改變輸入的規則:

MM−1=M−1M=I2.

這是反矩陣的定義;存在反矩陣的方陣,稱為可逆方陣。這裡的還原,是對任意實數輸入成立的完整代數規則,不只是某一筆資料的猜測。Cayley 的原文也以兩種組合順序都得到單位矩陣來說明反矩陣。Archive.org

單位矩陣也提供了一個重要的相等情形:對任何二階矩陣 M,都有

I2M=MI2=M.

因此,「不能任意交換」確實不等於「換序後永遠不同」。

二階公式為什麼是那個樣子?

對一般二階矩陣

M=[abcd],

正向關係是

u=ax+by,v=cx+dy.

把第一式乘 d,第二式乘 b,再相減:

du−bv=(ad−bc)x.

同理,把第二式乘 a,第一式乘 c,再相減:

av−cu=(ad−bc)y.

令

Δ=ad−bc.

這個數稱為 M 的二階行列式,也寫成 detM。當 Δ≠0 時,就可以除以它,得到

x=du−bvΔ,y=−cu+avΔ.

因此,反向規則的係數矩陣是

M−1=1ad−bc[d−b−ca](ad−bc≠0).

「交換對角線元素、另外兩格變號,再除以行列式」可以作為記法;但它不是沒有理由的排列口訣。上面的消去過程,解釋了每一個係數為什麼會出現在那個位置。

還可以直接確認這個公式確實形成雙向還原。令

J=[d−b−ca],

則

MJ=[ad−bc−ab+bacd−dc−bc+ad]=ΔI2,

而

JM=[da−bcdb−bd−ca+ac−cb+ad]=ΔI2.

所以,當 Δ≠0 時,兩式除以 Δ,就得到

M(JΔ)=(JΔ)M=I2.

這個推導沒有要求 a 或 d 各自非零;真正不能為零的是整個 ad−bc。

也因此,反矩陣不是把原矩陣每一格分別取倒數。我們的配方矩陣含有零,卻仍然有反矩陣;逐格取倒數在這裡根本無法完成。

完整計算與雙向回查

本例

M=[2110]

的行列式為

detM=2·0−1·1=−1≠0.

行列式是負數並不妨礙可逆;條件是「不等於零」,不是「大於零」。

所以

M−1=1−1[0−1−12]=[011−2].

依照矩陣乘法檢查:

MM−1=[2·0+1·12·1+1·(−2)1·0+0·11·1+0·(−2)]=[1001].

另一個方向也成立:

M−1M=[0·2+1·10·1+1·01·2+(−2)·11·1+(−2)·0]=[1001].

若材料總量是十支鉛筆、三張卡紙,就有

[xy]=[011−2][103]=[34].

因此是三包甲包、四包乙包。回到原配方檢查:

2·3+1·4=10,1·3+0·4=3.
可逆,不等於每組材料總量都是可行的包裝方案

數學上的逆運算成立後,應用問題仍要檢查包數是否為非負整數。

在這個固定配方中,

x=v,y=u−2v.

所以,要得到非負整數包數,材料總量必須滿足

u,v 都是非負整數,且 u≥2v.

當 u=2v 時,y=0,表示只用甲包;當 v=0 時,x=0,表示只用乙包。兩種材料總量都為零時,還原結果就是 x=y=0。

相反地,若輸入 u=1,v=1,反矩陣仍會給出唯一實數解

x=1,y=−1,

而且代回兩條式子確實成立。但「負一包乙包」不是可執行的包裝方案。

反矩陣保證的是實數範圍內的代數還原;現實可行性還要另外檢查。

不能反推,有時不是算得慢,而是資訊不夠

考慮另一個二階矩陣

N=[1224].

它的輸出關係是

u=x+2y,v=2x+4y=2u.

表面上記了兩個輸出,第二個卻只是第一個的兩倍,沒有提供另一項可以區分輸入的資訊。

例如,兩組不同的輸入

(x,y)=(2,0)與(x,y)=(0,1)

都得到

(u,v)=(2,4).

只拿到 (2,4),不可能用一個確定的反向規則,同時還原成這兩個不同的原始輸入。這不是多按幾次計算機就能解決的問題。

而且,不是每一對輸出都有對應的輸入。例如 (u,v)=(2,5) 不符合 v=2u,就不可能由這個矩陣產生。沒有反矩陣,不等於每組輸出都對應很多輸入;有些輸出根本產生不了。

本例恰好有

detN=1·4−2·2=0.

對二階實矩陣,可逆的條件恰好就是 ad−bc≠0。為什麼等於零時一定不行?可以把零值與退化情形一起看清楚。

若第一列 (a,b) 不全為零,則 (b,−a) 是非零輸入,而且在 ad−bc=0 時,

[abcd][b−a]=[ab−babc−ad]=[00].

它與零輸入產生相同輸出,無法唯一還原。

若第一列全為零、第二列 (c,d) 不全為零,則改用非零輸入 (d,−c):

[00cd][d−c]=[0cd−dc]=[00].

若兩列全為零,所有輸入更都得到零輸出。

因此,在所有實數輸入的範圍內,ad−bc=0 時不存在能全面還原輸入的反矩陣。另加現實限制後,某一筆資料可能碰巧只剩一個可行方案,但這不會使原矩陣因此變成可逆。

反矩陣所分辨的,是一組規則有沒有保留足以全面、唯一還原輸入的資訊。矩陣可以把許多量組織起來,卻不保證每一種組織方式都可逆。

七、把運算交給電腦,把判斷責任留下來

只要輸入與規則確定,矩陣運算就適合交給電腦重複執行。但「電腦有輸出」與「答案值得相信」,中間還隔著尺寸、順序、資料解釋和數值檢查。

以下使用 Python 的 NumPy 套件示範。對這裡使用的二維陣列,A @ B 表示矩陣乘積;* 則用來作逐元素相乘或係數積,不能把 A * B 當成 A @ B。本例的 A,B 尺寸也不適合直接逐元素相乘。NumPy

還有一個記號差別要先知道:本文的數學下標從 1 開始,NumPy 的陣列索引從 0 開始。因此,數學上的 p22,在這份程式中要讀取 P[1, 1];M[0, 0] 則是 M 左上角的元素。這只是索引起點不同,不是把橫列與直行交換。NumPy

在已備妥 Python 與 NumPy 的教學環境中,將下列完整輸入保存為 ALG09_matrix_audit.py:

import platform

import numpy as np



# A:橫列依序是鉛筆、卡紙;直行依序是甲包、乙包、丙包。

A = np.array([[2, 1, 0],

              [1, 0, 3]], dtype=np.int64)



# B、D:橫列依序是甲包、乙包、丙包;直行依序是一班、二班。

B = np.array([[3, 2],

              [4, 1],

              [2, 5]], dtype=np.int64)

D = np.array([[1, 0],

              [0, 1],

              [1, 2]], dtype=np.int64)



# M:另一次只使用甲包、乙包;輸出仍依序是鉛筆、卡紙。

M = np.array([[2, 1],

              [1, 0]], dtype=np.float64)



if B.shape != D.shape:

    raise ValueError("線性組合的兩個矩陣必須同型。")

if A.shape[1] != B.shape[0]:

    raise ValueError("AB 的內側尺寸不相等;請回查資料標籤。")

if M.shape != (2, 2):

    raise ValueError("本示範只允許二階反矩陣。")



# 本例的 M 使用可精確表示的小整數;這不是一般近似資料的判定程序。

delta = M[0, 0] * M[1, 1] - M[0, 1] * M[1, 0]

if delta == 0:

    raise ValueError("本二階矩陣不可逆。")



L = 2 * B - D

P = A @ B

R = np.linalg.inv(M)



print("Python:", platform.python_version())

print("NumPy:", np.__version__)

print("A.shape, B.shape, P.shape =", A.shape, B.shape, P.shape)

print("2B-D =", L.tolist())

print("AB =", P.tolist())

print("det(M) =", float(delta))

print("M_inverse =", R.tolist())

print("M @ M_inverse =", (M @ R).tolist())

print("M_inverse @ M =", (R @ M).tolist())

在檔案所在資料夾執行:

python ALG09_matrix_audit.py

要把輸出另存為文字紀錄,可以執行:

python ALG09_matrix_audit.py > ALG09_matrix_audit_output.txt

第二個指令會把原本顯示在終端機的正常輸出寫入指定檔案。保存時應同時保留程式與輸出,不能只留下最後的答案矩陣。

這份程式本次實際執行得到:

Python: 3.13.5

NumPy: 2.3.5

A.shape, B.shape, P.shape = (2, 3) (3, 2) (2, 2)

2B-D = [[5, 4], [8, 1], [3, 8]]

AB = [[10, 5], [9, 17]]

det(M) = -1.0

M_inverse = [[0.0, 1.0], [1.0, -2.0]]

M @ M_inverse = [[1.0, 0.0], [0.0, 1.0]]

M_inverse @ M = [[1.0, 0.0], [0.0, 1.0]]

版本號是這次執行環境的紀錄,不表示每個環境都必須顯示相同版本。

人工稽核至少要能指定一格,說明它從哪裡來。例如,輸出矩陣的第 2 列、第 2 行是 17,我們不用任何矩陣函式,也能從原資料證明:

p22=1·2⏟二班甲包的卡紙+0·1⏟二班乙包的卡紙+3·5⏟二班丙包的卡紙=17.

這不只是核對「螢幕上也有 17」,而是核對它確實表示二班所需的卡紙張數。

若結果不一致,應回查保存的原始輸入、橫列與直行順序,以及是否仍在計算 A @ B,不要先把輸出手動改成預期答案。若尺寸不相容,也不要為了消除錯誤訊息就任意補零或改排列;應先查出哪個分類沒有接上。

這份程式針對的是本文固定的小整數資料;其中行列式的計算得到可精確表示的 −1。不能直接把 delta == 0 搬去當成所有近似小數資料的可靠判定方法。

其他問題若使用近似小數,電腦求出的反矩陣可能受到浮點誤差影響。NumPy 官方文件提醒:某些數值上不穩定的情形,即使沒有報錯,求逆結果仍可能不準確。因此,不能把「程式執行成功」或「顯示的乘積接近單位矩陣」當成一般性的精確數學證明。NumPy

八、今天仍然重要的,是整批資料背後的共同規則

矩陣對今天的影響,可以從一個具體的運算元件看見,而不必只背誦產業名稱。

例如,PyTorch 的 Linear 元件,使用一組係數把多個輸入加權、加總,形成多個輸出;預設還包含可學習的額外加項,設定 bias=False 才不使用這個加項。這些係數與加項在一次固定的計算中有確定值,但在訓練過程中可以更新。PyTorch Documentation

先只看不含額外加項的乘法部分。用本文的排列方式理解,可以把一筆資料的多個數放成一個直行,把不同資料並排成一張矩陣,再由同一張係數表處理它們。其共同機制,正如 A 對 B 的每個班級使用相同的材料配方。

這是運算結構的連結,不表示材料包與人工智慧模型是同一種現實問題。它也不表示一個實際模型只需要一張矩陣,或算出數字就能保證判斷正確。

它指出的是一個確切連結:

同一套「多個輸入如何組成多個輸出」的規則,可以對一整批資料一致地執行。

軟體的資料排列方向仍須另外核對。PyTorch 文件把每筆資料的特徵放在最後一個維度,不能直接把本文「一筆資料放成一個直行」的配置原封不動搬進介面。加入額外加項後,也不再只是本文所算的單一矩陣乘積。PyTorch Documentation

回頭看,矩陣帶來的能力有清楚的界線。

它讓我們把多個量放進有位置的結構,讓同類資料能按位置合併,讓共同分類能透過乘法接合,也讓可逆性成為可以檢查的條件。但是,它不會替我們決定標籤是否正確、假設是否合理,也不會把已經混失的資訊重新變出來。

學會矩陣之後,你應該不只會照規則求出幾格數字,而能先問:

這個位置代表誰?這兩張表在接合什麼?乘法方向有沒有保留原來的作用順序?算出的結果能不能回到資料中解釋?需要倒推時,原規則究竟有沒有保留足夠資訊?

從這些問題出發,矩陣就不再只是一種排列數字的方法,而是一種組織、連接並檢查多個量之間關係的方法。