Python矩阵转置与乘法实现:常规逻辑与zip解包技巧

巷口听风
巷口听风
发布时间:2026-10-13 | 1人浏览过
原创

本文详细解析Python中矩阵转置与矩阵相乘的两种实现方式。矩阵转置介绍常规双重循环法与利用zip解包的简洁写法;矩阵乘法则强调行列匹配判断,并通过转置B矩阵优化计算逻辑,提供完整可运行代码示例供参考。

本文分享Python实现矩阵转置及矩阵相乘的具体代码示例,供开发者参考学习。

矩阵转置实现

矩阵转置

方法一:采用常规循环逻辑

常规循环法代码


def transpose(M):
  # 初始化转置后的矩阵
  result = []
  # 获取转置前的行和列
  row, col = shape(M)
  # 先对列进行循环
  for i in range(col):
    # 外层循环的容器
    item = []
    # 在列循环的内部进行行的循环
    for index in range(row):
      item.append(M[index][i])
    result.append(item)
  return result

核心思路是将矩阵的行转换为列,列转换为行。

  • 首先定义一个用于存储转置结果的容器。
  • 外层循环遍历列索引i,内部定义临时数组;内层循环遍历行索引j,依次提取M[j][i]元素并加入临时数组。
  • 每完成一次列循环,将生成的临时数组追加至最终结果数组。
  • 当所有列循环结束后,最终数组即为原矩阵的转置结果。

方法二:利用zip解包

zip解包法代码


def transpose(M):
  # 直接使用zip解包成转置后的元组迭代器,再强转成list存入最终的list中
  return [list(row) for row in zip(*M)]

实现思路如下:

zip函数解包后可返回一个迭代器,将多个可迭代对象组合为元组序列,例如:

zip函数示例


my_zip = list(zip(['a', 'b', 'c'], [1, 2, 3]))
print(my_zip) # [('a', 1), ('b', 2), ('c', 3)]

在循环过程中将生成的元组转换为list,并汇总至总列表中。

矩阵相乘

矩阵乘法实现


def matrixMultiply(A, B):
  # 获取A的行数和列数
  A_row, A_col = shape(A)
  # 获取B的行数和列数
  B_row, B_col = shape(B)
  # 不能运算情况的判断
  if(A_col != B_row):
    raise ValueError
  # 最终的矩阵
  result = []
  # zip 解包后是转置后的元组,强转成list, 存入result中
  BT = [list(row) for row in zip(*B)]
  # 开始做乘积运算
  for A_index in range(A_row):
    # 用于记录新矩阵的每行元素
    rowItem = []
    for B_index in range(len(BT)):
      # num 用于累加
      num = 0
      for Br in range(len(BT[B_index])):
        num += A[A_index][Br] * BT[B_index][Br]
      # 累加完成后,将数据存入新矩阵的行中
      rowItem.append(num)
    result.append(rowItem)
  return result

说明:A矩阵与B矩阵相乘得到新矩阵X,具体思路如下。

  • 首先验证乘法可行性:前提是A矩阵的列数必须等于B矩阵的行数。
  • 可通过图形化理解:若A为3行5列,B为5行2列,则结果矩阵X应为3行2列。
  • 将B矩阵转置得到BT(2行5列),此时A与BT均拥有5列,便于对应计算。
  • 计算新矩阵X时,取A的第i行元素与BT的第i行对应元素相乘并累加,构成X的新行。遍历A的所有行(共3行),逐步生成新矩阵X。

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述的代码示例对您的Python程序设计有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表