--- tags: 資料結構筆記 --- # 資料結構:Matrix ## 介紹 ### 什麼是矩陣? 矩陣是一種多維數據結構,它由行和列所構成。這類數據結構在數學、物理學和計算機科學等領域中得到廣泛應用。 ## 宣告和初始化 ### 如何宣告一個矩陣? 在C語言中,我們可以這樣宣告一個矩陣: ```C= int matrix[3][3]; // 一個3x3的整數矩陣 ``` 這創建了一個包含3行3列的整數矩陣,可以將其想像成一個3x3的表格。 ### 如何初始化矩陣? 我們可以在宣告的同時初始化矩陣: ```C= int matrix[2][2] = {{1, 2}, {3, 4}}; // 一個2x2的整數矩陣,並初始化其值 ``` ## 存取元素 ### 如何存取矩陣中的元素? 要存取矩陣中的特定元素,我們需要提供兩個索引值,分別代表行和列: ```C= int element = matrix[1][1]; // 存取第二行第二列的元素,值為4 ``` ## 遍歷矩陣 ### 如何遍歷矩陣中的所有元素? 我們可以使用兩個巢狀的迴圈來遍歷矩陣: ```C= for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } ``` 這個迴圈將會逐行逐列地列印出所有元素。 ## 矩陣的應用 矩陣在圖像處理、線性代數、物理模擬等領域中得到了廣泛應用。例如,在圖像處理中,我們可以使用矩陣來表示圖像的像素。 --- # 矩陣計算基礎 ## 矩陣加法 矩陣加法是指兩個相同維度的矩陣進行相應元素的相加。 ### 定義 假設有兩個矩陣 A 和 B,它們的維度均為 m x n,則它們的加法運算為: ``` C = A + B C[i][j] = A[i][j] + B[i][j] ``` ## 矩陣減法 矩陣減法是指兩個相同維度的矩陣進行相應元素的相減。 ### 定義 假設有兩個矩陣 A 和 B,它們的維度均為 m x n,則它們的減法運算為: ``` C = A - B C[i][j] = A[i][j] - B[i][j] ``` ## 矩陣乘法 矩陣乘法是一種更複雜的運算,它將兩個矩陣進行運算得到一個新的矩陣。 ### 定義 假設有兩個矩陣 A 和 B,它們的維度分別為 m x p 和 p x n,則它們的乘法運算為: ``` C = A * B C[i][j] = Σ(A[i][k] * B[k][j]) for k = 1 to p ``` ## 矩陣轉置 矩陣轉置是指將一個矩陣的行和列對換得到的新矩陣。 ### 定義 假設有一個矩陣 A,它的維度為 m x n,則它的轉置矩陣 A^T 的維度為 n x m,且: ``` (A^T)[i][j] = A[j][i] ``` ## 矩陣求逆(僅限可逆矩陣) 矩陣求逆是指對於一個可逆矩陣,找到一個矩陣 B,使得 A * B = B * A = I(單位矩陣)。 ### 注意 只有方陣(行數等於列數)且行列式不為零的矩陣才能求逆。 --- # 特殊矩陣 ## m*n的矩陣 m x n Matrix 一個 m*n 的矩陣是一個有 m 行 n 列的矩陣。例如: ``` 1 2 3 4 5 6 ``` 用於表示資料集中的多維度數據。 每一行可以代表一個樣本,每一列則是樣本的一個特徵。 ![](https://i.imgur.com/b9m1gag.png) - 儲存需求:m x n,因為每個元素需要一個儲存單元。 ## 零矩陣 Zero Matrix 零矩陣是所有元素都為零的矩陣。例如: ``` 0 0 0 0 ``` 在某些情況下,當我們需要初始化一個全是零的矩陣時,零矩陣就會派上用場。 ![](https://i.imgur.com/0QLVlX3.png) - 儲存需求:m x n,因為每個元素都是零,所以只需要儲存矩陣的維度信息。 ## 單位矩陣 Identity Matrix 單位矩陣是對角線上的元素都為1,其餘元素為0的矩陣。例如: ``` 1 0 0 1 ``` 在線性代數和矩陣運算中,單位矩陣扮演著類似於數字1對於乘法的角色。它保持了任何矩陣與其相乘後的值等於原矩陣。 ![](https://hackmd.io/_uploads/BktgBIFlp.png) - 儲存需求:m,因為只需要儲存矩陣的維度信息。 ## 下三角矩陣 一個下三角矩陣是一個所有主對角線以上的元素都是零的方陣。換句話說,下三角矩陣的非零元素只能在主對角線和它以下的位置。 ### 表示 下三角矩陣可以表示為: ``` a 0 0 b c 0 d e f ``` 其中 a, b, c, d, e, f 是任意數字。 - 由於下三角矩陣的主對角線以上的元素都是零,我們只需要儲存主對角線以下的元素即可。 - 儲存需求:n x (n+1) / 2,其中 n 是矩陣的維度。 ## 上三角矩陣 一個上三角矩陣是一個所有主對角線以下的元素都是零的方陣。換句話說,上三角矩陣的非零元素只能在主對角線和它以上的位置。 ### 表示 上三角矩陣可以表示為: ``` a b c 0 d e 0 0 f ``` 其中 a, b, c, d, e, f 是任意數字。 - 由於上三角矩陣的主對角線以下的元素都是零,我們只需要儲存主對角線以上的元素即可。 - 儲存需求:n x (n+1) / 2,其中 n 是矩陣的維度。 ## 對角矩陣 一個對角矩陣是一個所有主對角線以外的元素都是零的矩陣。 ### 表示 對角矩陣可以表示為: ``` a 0 0 0 b 0 0 0 c ``` 其中 a, b, c 是任意數字。 - 由於對角矩陣只有主對角線上有非零元素,其他位置都是零,我們只需要儲存主對角線上的元素即可。 - 儲存需求:n,其中 n 是矩陣的維度。 ## 對稱矩陣 一個對稱矩陣是它的轉置等於它本身的矩陣。 ### 表示 對稱矩陣可以表示為: ``` a b c b d e c e f ``` 其中 a, b, c, d, e, f 是任意數字,且 b = b, c = c, e = e。 - 由於對稱矩陣的所有元素都可以通過主對角線來推斷,我們只需要儲存主對角線以上的元素即可。 - 儲存需求:n x (n+1) / 2,其中 n 是矩陣的維度。