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 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
python音频处理用到的操作的示例代码
Oct 27 Python
python绘制简单折线图代码示例
Dec 19 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
Python读写docx文件的方法
May 08 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 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正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
学习python (2)
2006/10/31 Python
Python通过select实现异步IO的方法
2015/06/04 Python
Python set常用操作函数集锦
2017/11/15 Python
python线程池threadpool实现篇
2018/04/27 Python
自学python的建议和周期预算
2019/01/30 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
中软国际Java程序员笔试题
2014/07/19 面试题
销售代表求职自荐信
2013/10/01 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
安全生产承诺书
2014/03/26 职场文书
单位单身证明样本
2014/10/11 职场文书