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实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
python编程使用协程并发的优缺点
Sep 20 Python
将python文件打包成EXE应用程序的方法
May 22 Python
python tkinter窗口最大化的实现
Jul 15 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
python的Jenkins接口调用方式
May 12 Python
python 实现PIL模块在图片画线写字
May 16 Python
Python标准库之typing的用法(类型标注)
Jun 02 Python
python脚本框架webpy的url映射详解
Nov 20 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数组
2006/10/09 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
Python编写一个闹钟功能
2017/07/11 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
python的range和linspace使用详解
2019/11/27 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
自荐信结尾
2013/10/27 职场文书
大学学年自我鉴定
2013/10/28 职场文书
大二自我鉴定
2014/01/31 职场文书
部队党性分析材料
2014/02/16 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
《假如》教学反思
2016/02/17 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书