矩陣及其算法


1. 矩陣介紹

2. 矩陣相加

3. 矩陣相乘

4. 矩陣轉置

 

  

1. 矩陣介紹

矩陣(matrix)是數字或字符的矩形網格(如 excel 表格),並具有加、減、乘等運算規則。

從數學的角度來看,對於 m x n 矩陣的形式,可以用計算機中的二維數組來表示。基本上,許多矩陣的運算與應用都可以使用計算機中的二維數組解決。

矩陣維度

我們用 (行數, 列數) 來描述矩陣的維度。

 

2. 矩陣相加

矩陣的相加運算較為簡單,前提是相加的兩個矩陣對應的行數與列數必須相等,而相加后矩陣的行數與列數也是相同的。

示例代碼

 1 A = [[1,2,3], [1,2,3], [1,2,3]]
 2 B = [[1,2,3], [1,2,3], [1,2,3]]
 3 N = 3
 4 # 用於存放相加結果的矩陣
 5 C = [[None]*N for i in range(N)]
 6 
 7 for i in range(N):
 8     for j in range(N):
 9         C[i][j] = A[i][j] + B[i][j]  # 矩陣C = 矩陣A + 矩陣B
10 print("矩陣A和矩陣B的相加結果:")
11 for i in range(N):
12     for j in range(N):
13         print(C[i][j], end="\t")
14     print()

執行結果:

矩陣A和矩陣B的相加結果:
2       4       6
2       4       6
2       4       6

 

3. 矩陣相乘

並不是所有的矩陣都能進行乘法運算的。 並且,對輸出矩陣的維度也存在要求。

矩陣一的列數必須等於矩陣二的行數,如 M×N 矩陣和 N×K 矩陣相乘的結果是 M×K 矩陣(新矩陣取矩陣一的行和矩陣二的列)。

實現原理

矩陣乘法依賴於點積與行列元素的各種組合。 以下圖為例,矩陣 C 中的每個元素都是矩陣 A 矩陣 B 的的點積。

操作 a1·b1 表示我們取矩陣 A 中第 1 行 (1,7) 和矩陣 B 中第 1 列 (3,5) 的點積:

即:

為什么矩陣乘法以這種方式工作?

矩陣的乘法運算非常有用,但背后並沒有太深奧的數學規律,之所以數學家發明了這種運算,完全是因為它簡化了以前乏味的計算。這是一個人為的產物,但卻非常有效。

示例代碼

 1 # 矩陣相乘函數
 2 def matrix_multiply(matrix1, matrix2):
 3         # 初始化所需的維度
 4     m = len(matrix1)  # matrix1的行數
 5     n = len(matrix1[0])  # matrix1的列數 即matrix2的行數
 6     p = len(matrix2[0])  # matrix2的列數
 7 
 8     # 初始化結果矩陣 = matrix1的行數 x matrix2的列數
 9     result_matrix = [[None]*p for i in range(m)]
10 
11     for row_no in range(m):
12         for col_no in range(p):
13             tmp = 0
14             for k in range(n):
15                 tmp = tmp + matrix1[row_no][k] * matrix2[k][col_no]
16             result_matrix[row_no][col_no] = tmp
17     return result_matrix
18 
19 
20 A = [[1,2,3], [4,5,6], [7,8,9]]
21 B = [[1,2], [3,4], [5,6]]
22 
23 result_matrix = matrix_multiply(A, B)
24 
25 print("矩陣相乘結果:")
26 for i in range(len(result_matrix)):
27     for j in range(len(result_matrix[0])):
28         print(result_matrix[i][j], end="\t")
29     print()

執行結果:

矩陣相乘結果:
22      28
49      64
76      100

 

4. 矩陣轉置

轉置矩陣(AT)就是把原矩陣的行坐標元素與列坐標元素相互調換。假設 AT 為 A 的轉置矩陣,則有 AT[j, i] = A[i, j]。

轉置矩陣有兩個步驟:

  1. 矩陣旋轉 90°
  2. 反轉每行元素的順序(例如 [a b c] 變為 [c b a])

例如,將矩陣 M 轉置為 T:

示例代碼

 1 # 轉置矩陣函數
 2 def matrix_t(matrix):
 3     result_matrix = [[None]*len(matrix) for i in range(len(matrix[0]))]
 4     for i in range(len(matrix)):
 5         for j in range(len(matrix[0])):
 6             result_matrix[j][i] = matrix[i][j]
 7     return result_matrix
 8 
 9 
10 A = [[1,2], [3,4], [5,6]]
11 
12 result_matrix = matrix_t(A)
13 print("矩陣轉置結果:")
14 for i in result_matrix:
15     for j in i:
16         print(j, end="\t")
17     print()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM