Transpose of a Matrix(矩阵的转置)
题目链接:
Transpose of a Matrix(矩阵的转置)https://www.deep-ml.com/problems/2
题目描述:
难度:
easy(简单)。
分类:
Linear Algebra(线性代数)。
题目:
编写一个 Python 函数来计算给定矩阵的转置。
示例:
解释:
矩阵的转置。
让我们考虑一个矩阵 M 及其转置矩阵 M^T:
原始矩阵 M:
转置矩阵M^T:
解释:
矩阵转置涉及将其行转换为列,反之亦然。此操作在线性代数中对于各种计算和变换是基础的。
题目解析:
题解如下:
def transpose_matrix(a: list[list[int|float]]) -> list[list[int|float]]:
return [list(col) for col in zip(*a)]
代码解释:
1. 函数定义部分
def transpose_matrix(a: list[list[int | float]]) -> list[list[int | float]]:
-
功能:定义一个名为
transpose_matrix
的函数,用于计算矩阵的转置。 -
参数:
a: list[list[int | float]]
表示输入参数a
是一个二维列表,内部元素为整数(int
)或浮点数(float
)。 -
返回值:
-> list[list[int | float]]
表示函数最终会返回一个二维列表,结构与输入类似,元素类型也为整数或浮点数。
2. 核心转置逻辑
return [list(col) for col in zip(*a)]
-
zip(*a)
的作用:-
*a
是解包操作,将矩阵a
的每一行作为独立参数传入zip
。例如,输入a = [[1,2,3], [4,5,6]]
,*a
会解包为[1,2,3]
和[4,5,6]
。 -
zip
函数会将传入的行数据按列聚合,生成元组。对于示例输入,zip(*a)
会得到(1,4)
,(2,5)
,(3,6)
,即原矩阵的列变成了新的行。
-
-
列表推导式
[list(col) for col in zip(*a)]
:-
zip(*a)
生成的是元组,而题目要求输出列表。因此通过list(col)
将每个元组(如(1,4)
)转换为列表(如[1,4]
),最终组合成转置后的矩阵。
-
注释版本:
def transpose_matrix(a: list[list[int | float]]) -> list[list[int | float]]:
# 利用 zip(*a) 对矩阵进行转置操作
# zip(*a) 会将矩阵的列转换为元组
# 接着使用列表推导式将每个元组转换为列表
return [list(col) for col in zip(*a)]
思考总结:
-
问题分析:矩阵转置的核心是交换行与列,即将原矩阵的第 i 行变为转置后矩阵的第 i 列。例如,输入矩阵 [[1,2,3],[4,5,6]],转置后需将第一行的 1,2,3 和第二行的 4,5,6 转换为新矩阵的列。
-
Python 实现思路:
-
利用
zip(*a)
完成行列交换。*a
解包矩阵的行,zip
按列聚合元素,生成元组(如(1,4)
,(2,5)
,(3,6)
)。 -
由于题目要求输出列表,使用列表推导式
[list(col) for col in ...]
将元组转换为列表,满足最终格式。
-
-
关键步骤:
-
函数定义时明确输入输出类型,确保代码规范性。
-
通过
zip(*a)
高效实现转置逻辑,这是 Python 处理矩阵转置的简洁方法。 -
最后添加测试代码,验证函数功能,确保输入示例能正确输出转置结果。
-
-
总结:该解法利用 Python 内置函数的特性,简洁实现矩阵转置,核心在于理解
zip(*a)
的行列转换机制,以及数据类型的适配处理。