在 Python 中轉置矩陣
矩陣可以在 Python 中使用多維列表來表示。一旦表達出來,我們就可以執行數學理論中我們可以對矩陣執行的所有操作,例如矩陣乘法、矩陣加法和減法。
本文將討論一種這樣的操作。我們將在一些相關示例的幫助下學習如何使用 Python 轉置矩陣。
在 Python 中轉置矩陣
要在 Python 中轉置矩陣,我們可以編寫一個簡單的存根函式並使用 for
迴圈來轉置輸入矩陣。
def transpose(matrix):
if matrix == None or len(matrix) == 0:
return []
result = [[None for i in range(len(matrix))] for j in range(len(matrix[0]))]
for i in range(len(matrix[0])):
for j in range(len(matrix)):
result[i][j] = matrix[j][i]
return result
def print_matrix(matrix):
for row in matrix:
print(*row)
array = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
result = transpose(array)
print_matrix(result)
輸出:
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
上述方法的時間和空間複雜度為 O(mn)
,其中 m
是輸入矩陣的行數,n
是輸入矩陣的列數。
時間複雜度是 O(mn)
,因為我們正在迭代整個輸入矩陣。空間複雜度為 O(mn)
,因為我們建立了輸入矩陣的副本並將其儲存在單獨的變數中。
如果輸入矩陣的形狀是 m x n
,上面的存根函式首先建立一個大小為 n x m
的臨時矩陣,其中包含 None
值。其中,m
是輸入矩陣中的行數,而 n
是輸入矩陣中的列數。
接下來,它使用兩個巢狀的 for
迴圈遍歷輸入矩陣。在兩個 for
迴圈中,None
值被替換為來自輸入矩陣的實際值(result[i][j] = matrix[j][i]
)。最後,臨時矩陣作為輸出返回。
除了使用兩個巢狀的 for
迴圈來填充臨時矩陣,我們還可以在一行中編寫轉置邏輯以節省一些空間。
def transpose(matrix):
if matrix == None or len(matrix) == 0:
return []
return [[matrix[i][j] for i in range(len(matrix))] for j in range(len(matrix[0]))]
def print_matrix(matrix):
for row in matrix:
print(*row)
array = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
result = transpose(array)
print_matrix(result)
輸出:
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
該解決方案的時間和空間複雜度也與之前的解決方案 O(mn)
相同。
在 Python 中使用 NumPy
模組轉置矩陣
NumPy
是一個 Python 包,它具有豐富的實用程式,可用於處理大型多維矩陣和陣列,並對它們執行復雜而直接的數學運算。這些實用程式不僅對輸入是動態的,而且高度優化和快速。
使用 Python 中的 NumPy
模組,我們可以通過兩種方式轉置矩陣。第一種方法是使用 NumPy
陣列的 T
屬性,第二種方法是呼叫 NumPy
陣列的 transpose()
方法。
請參閱以下 Python 程式碼以瞭解如何使用上述兩種方法。
import numpy as np
array = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
array = np.array(array)
print(array.T) # First Method
print(array.transpose()) # Second Method
輸出:
[[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]
[ 5 10 15]]
[[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]
[ 5 10 15]]
transpose()
接受一個 axes
引數,該引數可用於對 NumPy
陣列執行一些很酷的轉置修改。要詳細瞭解此方法,請單擊此處。