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爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
Python语言实现将图片转化为html页面
Dec 06 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
详解python分布式进程
Oct 08 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
python错误调试及单元文档测试过程解析
Dec 19 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
python列表返回重复数据的下标
Feb 10 Python
MATLAB数学建模之画图汇总
Jul 16 Python
python collections模块的使用
Oct 16 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
php中$this->含义分析
2009/11/29 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
jquery等待效果示例
2014/05/01 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
怎么写好自荐信
2013/10/30 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
乔迁之喜主持词
2014/03/27 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
2016新党章学习心得体会
2016/01/15 职场文书