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]。
轉置矩陣有兩個步驟:
- 矩陣旋轉 90°
- 反轉每行元素的順序(例如 [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()