[Deep-ML]Transpose of a Matrix(矩阵的转置)

发布于:2025-04-09 ⋅ 阅读:(49) ⋅ 点赞:(0)

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)]

思考总结:

  1. 问题分析:矩阵转置的核心是交换行与列,即将原矩阵的第 i 行变为转置后矩阵的第 i 列。例如,输入矩阵 [[1,2,3],[4,5,6]],转置后需将第一行的 1,2,3 和第二行的 4,5,6 转换为新矩阵的列。

  2. Python 实现思路

    • 利用 zip(*a) 完成行列交换。*a 解包矩阵的行,zip 按列聚合元素,生成元组(如 (1,4)(2,5)(3,6))。

    • 由于题目要求输出列表,使用列表推导式 [list(col) for col in ...] 将元组转换为列表,满足最终格式。

  3. 关键步骤

    • 函数定义时明确输入输出类型,确保代码规范性。

    • 通过 zip(*a) 高效实现转置逻辑,这是 Python 处理矩阵转置的简洁方法。

    • 最后添加测试代码,验证函数功能,确保输入示例能正确输出转置结果。

  4. 总结:该解法利用 Python 内置函数的特性,简洁实现矩阵转置,核心在于理解 zip(*a) 的行列转换机制,以及数据类型的适配处理。


网站公告

今日签到

点亮在社区的每一天
去签到