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使用htpasswd实现基本认证授权的例子
Jun 10 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
vscode+PyQt5安装详解步骤
Aug 12 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
python查询MySQL将数据写入Excel
Oct 29 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
php 分页类 扩展代码
2009/06/11 PHP
php 图片上传类代码
2009/07/17 PHP
php 文件上传实例代码
2012/04/19 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
详解JS模块导入导出
2017/12/20 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
Django中使用group_by的方法
2015/05/26 Python
Python常用算法学习基础教程
2017/04/13 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
python pygame实现2048游戏
2018/11/20 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
大专生自我鉴定范文
2013/10/01 职场文书
事假请假条范文
2014/04/11 职场文书
年度评优评先方案
2014/06/03 职场文书
项目负责人岗位职责
2015/02/15 职场文书
水电施工员岗位职责
2015/04/11 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS