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标准库inspect的具体使用方法
Dec 06 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
Python上下文管理器全实例详解
Nov 12 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
python 使用raw socket进行TCP SYN扫描实例
May 05 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 Python
PYTHON InceptionV3模型的复现详解
May 06 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将回调函数作用到给定数组单元的方法
2014/08/19 PHP
smarty实现多级分类的方法
2014/12/05 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python实现动态数组的示例代码
2019/07/15 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python web框架中实现原生分页
2019/09/08 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
车工岗位职责
2013/11/26 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
保安岗位职责
2014/02/21 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
党课心得体会范文
2014/09/09 职场文书
农村文化建设标语
2014/10/07 职场文书
小学生作文评语集锦
2014/12/25 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书