在 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
数组执行一些很酷的转置修改。要详细了解此方法,请单击此处。