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 解析html之BeautifulSoup
Jul 07 Python
python网络编程之读取网站根目录实例
Sep 30 Python
python多重继承实例
Oct 11 Python
使用Python实现一个简单的项目监控
Mar 31 Python
Python实现通讯录功能
Feb 22 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
基于django传递数据到后端的例子
Aug 16 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
python 模拟登陆github的示例
Dec 04 Python
Python中生成ndarray实例讲解
Feb 22 Python
python生成随机数、随机字符、随机字符串
Apr 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
一道关于php变量引用的面试题
2010/08/08 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
通过cmd进入python的实例操作
2019/06/26 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
先进集体事迹材料
2014/02/17 职场文书
水毁工程实施方案
2014/04/01 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
三年级学生评语大全
2014/12/26 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
家长通知书家长意见
2015/06/03 职场文书
外出考察学习心得体会
2016/01/18 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers