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基础教程之类class定义使用方法
Feb 20 Python
python实现给数组按片赋值的方法
Jul 28 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
python timestamp和datetime之间转换详解
Dec 11 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
Aug 04 Python
python3实现小球转动抽奖小游戏
Apr 15 Python
python原类、类的创建过程与方法详解
Jul 19 Python
django认证系统 Authentication使用详解
Jul 22 Python
pd.DataFrame统计各列数值多少的实例
Dec 05 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
基于python实现图片转字符画代码实例
Sep 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
在PHP中使用反射技术的架构插件使用说明
2010/05/18 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
php实现的RSS生成类实例
2015/04/23 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python实现反转部分单向链表
2018/09/27 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
python+requests接口自动化框架的实现
2020/08/31 Python
利用python 下载bilibili视频
2020/11/13 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
雏鹰争章活动总结
2014/05/09 职场文书
民政局个人整改措施
2014/09/24 职场文书
终止劳动合同协议书
2014/10/05 职场文书
综治目标管理责任书
2015/05/11 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书