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的Bottle框架中使用微信API的示例
Apr 23 Python
Python随机数用法实例详解【基于random模块】
Apr 18 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
分数霸榜! python助你微信跳一跳拿高分
Jan 08 Python
对Python中gensim库word2vec的使用详解
May 08 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
python redis连接 有序集合去重的代码
Aug 04 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
PHP对字符串的递增运算分析
2010/08/08 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
php权重计算方法代码分享
2014/01/09 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
jquery创建div 实现代码
2009/04/27 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
python语音识别实践之百度语音API
2018/08/30 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
高二政治教学反思
2014/02/01 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
2014个人年度工作总结
2014/12/15 职场文书
公司的力量观后感
2015/06/05 职场文书
旷工检讨书大全
2015/08/15 职场文书
Python Socket编程详解
2021/04/25 Python