二维数组矩阵转置的核心是行列位置互换,方阵可用原地交换上三角元素实现,非方阵需新建n×m数组赋值;python中可用zip、列表推导式或numpy的.t方法;需注意空矩阵、不规则形状及内存访问性能问题。

二维数组的矩阵行列变换,核心是交换行与列的位置,也就是实现矩阵的转置。对一个 m × n 的矩阵,转置后变成 n × m 的新矩阵,其中原矩阵第 i 行第 j 列的元素,变为新矩阵第 j 行第 i 列的元素。
原地转置(适用于方阵)
当二维数组是方阵(行数等于列数)时,可以在不额外分配空间的前提下完成转置,只需遍历上三角(或下三角)区域,逐个交换对称位置的元素。
- 遍历范围:行索引 i 从 0 到 n−2,列索引 j 从 i+1 到 n−1
- 每次交换 matrix[i][j] 和 matrix[j][i]
- 注意:不能遍历整个矩阵,否则会交换两次,回到原状
新建数组转置(通用方法)
对任意形状的二维数组(包括非方阵),最稳妥的方式是创建一个新的 n × m 数组,按转置逻辑赋值。
- 设原数组为 matrix[m][n],新数组为 transposed[n][m]
- 循环:外层遍历列(j = 0 到 n−1),内层遍历行(i = 0 到 m−1)
- 赋值: transposed[j][i] = matrix[i][j]
- 该方式逻辑清晰、不易出错,适合大多数编程语言(如 Python、Java、C++)
Python 中的简洁实现
Python 提供多种便捷写法,尤其适合快速验证或小规模数据。
- 使用 zip: list(zip(*matrix)) —— 解包后按列聚合,返回元组,需转为列表和整型
- 列表推导式: [[matrix[i][j] for i in range(len(matrix))] for j in range(len(matrix[0]))]
- NumPy 用户可直接调用 matrix.T 或 np.transpose(matrix)
注意事项与常见陷阱
实际编码中容易忽略边界和类型细节,导致结果异常或运行错误。
- 空矩阵或单行/单列矩阵需单独判断,避免索引越界
- 若原数组是“不规则”二维列表(每行长度不同),转置前应先校验合法性
- 修改原数组时注意是否需要深拷贝,避免副作用影响其他逻辑
- C/C++ 等语言中,内存布局是行优先,转置后访问局部性下降,可能影响性能











