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正则表达式知识汇总
Sep 22 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
Python hashlib模块用法实例分析
Jun 12 Python
python 实现A*算法的示例代码
Aug 13 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
Python3.5内置模块之random模块用法实例分析
Apr 26 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
python计算n的阶乘的方法代码
Oct 25 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
python实现磁盘日志清理的示例
Nov 05 Python
浅谈Python数学建模之线性规划
Jun 23 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数组及条件,循环语句学习
2012/11/11 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
BootStrap中
2016/12/10 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
Python数据结构之翻转链表
2017/02/25 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
python实现的汉诺塔算法示例
2019/10/23 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
tensorflow自定义激活函数实例
2020/02/04 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
Django models文件模型变更错误解决
2020/05/11 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
行政管理专业推荐信
2013/11/02 职场文书
土建资料员岗位职责
2014/01/04 职场文书
学校万圣节活动方案
2014/02/13 职场文书
市场营销专业求职信
2014/06/17 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
民事纠纷协议书
2016/03/23 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
Java spring单点登录系统
2021/09/04 Java/Android