You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从任意长度列表提取列?并判断两矩阵是否互为转置

嘿,刚好碰到过类似的问题,我来给你捋清楚怎么解决!

解决任意长度矩阵的转置判断问题

首先,我们得先搞清楚怎么从任意长度的矩阵里提取列,然后再用这个逻辑来判断两个矩阵是不是互为转置。

1. 提取任意长度矩阵的列

不管矩阵有多少行多少列,要提取第n列(注意Python里索引从0开始),用列表推导式就能轻松搞定:

# 提取matrix的第n列
n = 0
column = [row[n] for row in matrix]

比如你给的matrix_1 = [[1,2],[3,4],[5,6]],提取第0列就是[1,3,5],第1列就是[2,4,6],刚好对应matrix_2的两行。

不过要注意,这个方法要求矩阵的所有行长度一致(也就是正规矩阵),如果有的行短有的行长,提取的时候会报错,所以判断转置前我们得先检查矩阵的合法性。

2. 判断两个矩阵是否互为转置

判断的核心逻辑其实很简单:矩阵A的转置等于矩阵B,那它们就互为转置。而转置任意矩阵的话,Python里的zip函数是个神器,不用自己写循环去一个个提取列。

步骤拆解:

  • 第一步:先检查两个矩阵的维度是否匹配。比如矩阵1是M行N列,那矩阵2必须是N行M列,不然直接返回False。
  • 第二步:把其中一个矩阵转置,然后和另一个矩阵比较是否完全相等。

完整代码实现

def transpose_matrix(matrix):
    # 处理空矩阵的特殊情况
    if not matrix:
        return []
    # zip(*matrix)会把每一行的对应元素打包成元组,再转成列表就是转置后的矩阵
    return [list(col) for col in zip(*matrix)]

def are_transposes(matrix1, matrix2):
    # 两个空矩阵也算互为转置
    if not matrix1 and not matrix2:
        return True
    # 一个空一个非空,直接不匹配
    if not matrix1 or not matrix2:
        return False
    # 检查维度是否对应:matrix1的行数 == matrix2的列数,matrix1的列数 == matrix2的行数
    if len(matrix1) != len(matrix2[0]) or len(matrix1[0]) != len(matrix2):
        return False
    # 转置matrix1后和matrix2比较
    return transpose_matrix(matrix1) == matrix2

测试你的示例

matrix_1 = [[1, 2], [3, 4], [5, 6]]
matrix_2 = [[1, 3, 5], [2, 4, 6]]
print(are_transposes(matrix_1, matrix_2))  # 输出:True

额外说明

  • 如果你的矩阵里有不同长度的行(非正规矩阵),这个函数会在检查维度的时候返回False,因为len(matrix1[0])会取第一行的长度,而如果matrix2的行数和这个不相等,就直接不匹配了。
  • zip(*matrix)的原理是把矩阵的每一行作为独立参数传给zip,zip会按位置把所有行的第i个元素组合成一个元组,这样就得到了转置后的每一列。

内容的提问来源于stack exchange,提问作者Mart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:19:16