在 Python 中轉置矩陣

Vaibhav Vaibhav 2023年1月30日 2022年5月18日
  1. 在 Python 中轉置矩陣
  2. 在 Python 中使用 NumPy 模組轉置矩陣
在 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 程式碼以瞭解如何使用上述兩種方法。

注意
要使用這些實用程式,我們首先必須使用 numpy.array() 方法將輸入矩陣轉換為 NumPy 陣列。要了解有關此方法的更多資訊,請單擊此處
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 陣列執行一些很酷的轉置修改。要詳細瞭解此方法,請單擊此處

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

LinkedIn GitHub

相關文章 - Python Matrix