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中的JSON使用
Apr 28 Python
Python打印斐波拉契数列实例
Jul 07 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
详解Python的三种可变参数
May 08 Python
Ranorex通过Python将报告发送到邮箱的方法
Jan 12 Python
Python安装whl文件过程图解
Feb 18 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
pycharm sciview的图片另存为操作
Jun 01 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
python爬虫用mongodb的理由
Jul 28 Python
Python基于gevent实现文件字符串查找器
Aug 11 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 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 pki加密技术(openssl)详解
2013/07/01 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
python连接mongodb密码认证实例
2018/10/16 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
django实现类似触发器的功能
2019/11/15 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
python实现网页录音效果
2020/10/26 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
Java程序员面试题
2013/07/15 面试题
揭牌仪式策划方案
2014/05/28 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
紫日观后感
2015/06/05 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
JavaScript实现登录窗体
2021/06/22 Javascript