Python实现的矩阵转置与矩阵相乘运算示例

yipeiwu_com7年前Python基础

本文实例讲述了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解包

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

思路:

zip 解包后,返回一个将多个可迭代对象组合成一个元组序列的迭代器,正如:

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

在每次循环中将元组强转成list 并存入总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列,相乘结果是3行2列
  • 将B转置后是2行5列,我们称之为BT, 这样 A 和 BT 都是5列了
  • 则A的每行中的第 i 个元素 * BT每行中的第 i 个元素,相加构成新矩阵X的新行,循环A行,共3行,则新矩阵X就会逐步添加新行,待循环完毕,得到新矩阵X

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

希望本文所述对大家Python程序设计有所帮助。

相关文章

深入浅析Python 中的sklearn模型选择

1.主要功能如下: 1.classification分类 2.Regression回归 3.Clustering聚类 4.Dimensionality reduction降维 5.Mo...

浅谈python requests 的put, post 请求参数的问题

浅谈python requests 的put, post 请求参数的问题

post, put请求的参数有两种形式 一种是把参数拼接在url中 对应postman 第二种是把参数放在body中 对应postman 在Python requests 库中 一般...

浅谈Python数据类型之间的转换

Python数据类型之间的转换 函数 描述 int(x [,base])...

Python3 循环语句(for、while、break、range等)

Python3 循环语句(for、while、break、range等)

本章节将为大家介绍Python循环语句的使用。 Python中的循环语句有 for 和 while。 Python循环语句的控制结构图如下所示: while 循环 Python中whi...

python调用tcpdump抓包过滤的方法

python调用tcpdump抓包过滤的方法

本文实例为大家分享了python调用tcpdump抓包过滤的具体代码,供大家参考,具体内容如下 之前在linux用python脚本写一个抓包分析小工具,实在不想用什么libpcap、py...