---
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
```
用於表示資料集中的多維度數據。
每一行可以代表一個樣本,每一列則是樣本的一個特徵。

- 儲存需求:m x n,因為每個元素需要一個儲存單元。
## 零矩陣 Zero Matrix
零矩陣是所有元素都為零的矩陣。例如:
```
0 0
0 0
```
在某些情況下,當我們需要初始化一個全是零的矩陣時,零矩陣就會派上用場。

- 儲存需求:m x n,因為每個元素都是零,所以只需要儲存矩陣的維度信息。
## 單位矩陣 Identity Matrix
單位矩陣是對角線上的元素都為1,其餘元素為0的矩陣。例如:
```
1 0
0 1
```
在線性代數和矩陣運算中,單位矩陣扮演著類似於數字1對於乘法的角色。它保持了任何矩陣與其相乘後的值等於原矩陣。

- 儲存需求: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 是矩陣的維度。