JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

矩陣與向量的乘法

矩陣乘向量並不神秘:它把矩陣的各行混合起來。矩陣乘矩陣的意思是「先做一個變換,再做另一個」。一路上我們會遇到那條讓每個初學者吃驚的規則——順序很重要,A*B 不等於 B*A——以及那個什麼都不做的矩陣。

矩陣乘向量:混合各行

下面這幅圖能讓一切豁然開朗。要算 A 乘 向量 x,就把 x 裡的數字當作權重,用每個權重去乘 A 的對應行,再把結果加起來。輸出就是 A 各行的一個混合。

[[2,0],[0,3]] * (1,1)
  = 1*(2,0) + 1*(0,3)
  = (2,0) + (0,3)
  = (2,3)
x = (1,1) 給第一行權重 1、第二行權重 1,再相加。

矩陣乘矩陣 = 先做一個,再做另一個

矩陣乘矩陣 不過是把這個想法重複一遍。把兩個矩陣都讀成機器,乘積 A*B 的意思是:先讓向量穿過 B,再穿過 A。這種串聯叫做 複合。所以 A*B 作用在 x 上,等於 A 作用在(B 作用在 x 上的結果)上。

  1. 從右往左讀 A*B:B 先發生,A 後發生。
  2. 乘積的第 j 行,就是 A 作用在 B 的第 j 行上的結果。
  3. 把這些輸出行並肩排好——那就是乘積矩陣。

形狀必須對得上,而且順序很重要

只有當 A 的行數等於 B 的列數時,才能算 A*B:(m 乘 n)乘(n 乘 p)得到(m 乘 p)。中間那兩個數字必須相等,然後被「約掉」。如果它們不相等,乘積根本就不存在。

A=[[0,-1],[1,0]] (rotate)   B=[[2,0],[0,1]] (stretch)
A*B = [[0,-1],[2, 0]]
B*A = [[0,-2],[1, 0]]   <- different!
同樣兩個矩陣,兩個不同的乘積。換了順序,答案就變了。

什麼都不做的矩陣

單位矩陣 I 在對角線上全是 1,其餘全是 0。乘上它,向量或矩陣都原封不動:I*x = x,A*I = A。它就是矩陣世界裡的1——那台什麼都不做的機器。

[[1,0],[0,1]] * (5,7) = (5,7)   <- unchanged
單位矩陣把向量原樣還給你。