在 Python 中转置矩阵

Vaibhav Vaibhav 2023年1月30日
  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
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.

相关文章 - Python Matrix