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 threading多线程编程实例
Sep 18 Python
朴素贝叶斯算法的python实现方法
Nov 18 Python
python获取指定网页上所有超链接的方法
Apr 04 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
python通过pip更新所有已安装的包实现方法
May 19 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python SQLite3简介
Feb 22 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
keras topN显示,自编写代码案例
Jul 03 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 Python
python 基于pygame实现俄罗斯方块
Mar 02 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在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
在PHP中使用redis
2013/11/04 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
Python中序列的修改、散列与切片详解
2017/08/27 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
2013年保送生自荐信格式
2013/11/20 职场文书
心理健康教育心得体会
2013/12/29 职场文书
房地产项目策划书
2014/02/05 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis