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


Posted in Python onMarch 26, 2019

本文实例讲述了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每隔N秒运行指定函数的方法
Mar 16 Python
Python使用shelve模块实现简单数据存储的方法
May 20 Python
简单谈谈Python中的json与pickle
Jul 19 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python读取txt某几列绘图的方法
Oct 14 Python
Python实现微信翻译机器人的方法
Aug 13 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 Python
Selenium alert 弹窗处理的示例代码
Aug 06 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 Python
深度辨析Python的eval()与exec()的方法
Mar 26 #Python
详解Python locals()的陷阱
Mar 26 #Python
python 为什么说eval要慎用
Mar 26 #Python
Python eval的常见错误封装及利用原理详解
Mar 26 #Python
Python骚操作之动态定义函数
Mar 26 #Python
python 将有序数组转换为二叉树的方法
Mar 26 #Python
浅谈Python爬虫基本套路
Mar 25 #Python
You might like
php模板函数 正则实现代码
2012/10/15 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python计算n的阶乘的方法代码
2019/10/25 Python
python创建n行m列数组示例
2019/12/02 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
用python实现名片管理系统
2020/06/18 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
关于长城的导游词
2015/01/30 职场文书
刘公岛导游词
2015/02/05 职场文书
项目合作意向书
2015/05/08 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers