
學(xué)會矩陣的四則運算。其中矩陣乘法是最重要也最容易搞混的本章重點講透。17.1 矩陣加減對應(yīng)元素相加減兩個尺寸相同的矩陣對應(yīng)位置的元素相加減[ 1 2 ] [ 5 6 ] [ 15 26 ] [ 6 8 ] [ 3 4 ] [ 7 8 ] [ 37 48 ] [ 10 12 ]規(guī)則同行同列的元素相加。減法同理。17.2 數(shù)乘每個元素都乘一個數(shù)一個標(biāo)量乘矩陣等于矩陣每個元素都乘這個標(biāo)量[ 1 2 ] [ 2 4 ] 2 × [ 3 4 ] [ 6 8 ]17.3 轉(zhuǎn)置行列互換轉(zhuǎn)置transpose把矩陣沿對角線翻轉(zhuǎn)行變列、列變行。[ 1 2 3 ] [ 1 4 ] A [ 4 5 6 ] A? [ 2 5 ] [ 3 6 ]第 i 行變成第 i 列。A 的轉(zhuǎn)置記作 A?或A.transpose()。對稱矩陣就是轉(zhuǎn)置等于自己的矩陣A? A。17.4 點積內(nèi)積兩個向量的相似度兩個同維向量的點積dot product對應(yīng)分量相乘再求和。(1, 2, 3) · (4, 5, 6) 1×4 2×5 3×6 4 10 18 32點積的意義點積 0兩個向量垂直正交點積 兩向量長度乘積則同向點積 0方向大致相反點積是衡量兩個向量有多像的工具在機器學(xué)習(xí)、物理里無處不在。17.5 矩陣乘法重點這是最重要的運算規(guī)則需要記牢。規(guī)則兩個矩陣 Am×n和 Bn×p相乘得到 Cm×pA 的列數(shù)必須等于 B 的行數(shù)都是 n結(jié)果 C 的第 i 行第 j 列 A 的第 i 行與B 的第 j 列的點積例子A [ 1 2 ] B [ 5 6 ] [ 3 4 ] [ 7 8 ]A 是 2×2B 是 2×2結(jié)果 C 是 2×2。算 C(0,0)A 第 1 行 (1,2) · B 第 1 列 (5,7) 1×5 2×7 19算 C(0,1)A 第 1 行 (1,2) · B 第 2 列 (6,8) 1×6 2×8 22算 C(1,0)A 第 2 行 (3,4) · B 第 1 列 (5,7) 3×5 4×7 43算 C(1,1)A 第 2 行 (3,4) · B 第 2 列 (6,8) 3×6 4×8 50C [ 19 22 ] [ 43 50 ]矩陣 × 向量向量是只有一列的矩陣所以矩陣乘向量是矩陣乘法的特殊情況[ 1 2 ] [ 1 ] [ 1×1 2×1 ] [ 3 ] [ 3 4 ] × [ 1 ] [ 3×1 4×1 ] [ 7 ]矩陣乘向量 對向量做一次變換第 21 章會展開這是理解幾何的關(guān)鍵。關(guān)鍵性質(zhì)不滿足交換律矩陣乘法不滿足交換律A×B ≠ B×A大多數(shù)情況下。而且順序影響尺寸2×3 乘 3×4 可以得 2×4但 3×4 乘 2×3 不行列數(shù)不等于行數(shù)。記憶矩陣乘法左矩陣的列 右矩陣的行才能乘結(jié)果尺寸 “左行 × 右列”。17.6 在 Eigen 里做矩陣運算#includeEigen/Dense#includeiostreamintmain(){Eigen::Matrix2d A,B;A1,2,3,4;B5,6,7,8;std::coutA B \nAB\n\n;// 對應(yīng)相加std::cout2 * A \n2*A\n\n;// 數(shù)乘std::coutA * B \nA*B\n\n;// 矩陣乘法std::coutA^T \nA.transpose()\n\n;// 轉(zhuǎn)置Eigen::Vector3du(1,2,3),v(4,5,6);std::cout點積 u.dot(v)\n;// 32return0;}存成ch17.cpp按附錄 C.3 編譯運行實際輸出A B 6 8 10 12 2 * A 2 4 6 8 A * B 19 22 43 50 A^T 1 3 2 4 點積 32A * B得到19 22 / 43 50正好等于你上面手算的結(jié)果——矩陣乘法的算法和代碼是一一對應(yīng)的。你可以順手加一句std::cout B * A \n;看到B * A是23 34 / 31 46和A * B不同交換律不成立這件事就親眼確認了。注意 Eigen 的*A * B是矩陣乘法不是逐元素乘。想逐元素相乘要用.array()第 27 章。這是新手最容易搞錯的地方。17.7 小結(jié)加減對應(yīng)元素相加減尺寸要相同。數(shù)乘每個元素乘標(biāo)量。轉(zhuǎn)置行列互換。點積對應(yīng)分量相乘求和。矩陣乘法左矩陣列數(shù) 右矩陣行數(shù)結(jié)果(i,j) 左 i 行點乘右 j 列不滿足交換律。下一章用矩陣表示和解線性方程組——矩陣最重要的應(yīng)用。練習(xí)題計算兩個 2×2 矩陣的加減。手算矩陣乘法A[1 2; 3 4]B[5 6; 7 8]求 A×B 和 B×A驗證交換律不成立。計算向量 (1,2,3) 和 (4,5,6) 的點積。求矩陣 [1 2 3; 4 5 6] 的轉(zhuǎn)置。判斷2×3 矩陣能和 3×2 矩陣相乘嗎結(jié)果是多少尺寸