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 self,cls,decorator的理解
Jul 13 Python
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
Python Web框架Flask下网站开发入门实例
Feb 08 Python
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
Jun 07 Python
python爬虫实例详解
Jun 19 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
Python接口测试结果集实现封装比较
May 01 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
上班离岗检讨书
2014/01/27 职场文书
军训自我鉴定范文
2014/02/13 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
自我检讨书范文
2015/01/28 职场文书
给下属加薪申请报告
2015/05/15 职场文书
七年级生物教学反思
2016/02/20 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android