Python实现矩阵转置的方法分析


Posted in Python onNovember 24, 2017

本文实例讲述了Python实现矩阵转置的方法。分享给大家供大家参考,具体如下:

前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加。例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再添加[5, 6]扩充为[[1, 3, 5], [2, 4, 6]]等等。

其实不动脑筋的话,用个二重循环很容易写出来:

def trans(m):
  a = [[] for i in m[0]]
  for i in m:
    for j in range(len(i)):
      a[j].append(i[j])
  return a
m = [[1, 2], [3, 4], [5, 6]]  # 想象第一个列表是原始的,后面的是往里添加的
print trans(m)  # result:[[1, 3, 5], [ 2, 4, 6]]

然而不管怎么看这种代码都很丑。

仔细看了一下m这种结构。等等,这不是字典的iteritems()的结果么?如果dict(m),那么结果——不就是keys()和values()么?

于是利用字典转换一下:

def trans(m):
  d = dict(m)
  return [d.keys(), d.values()]

可是再仔细想想,这里面有bug。如果添加列表的第一个元素相同,也就是转化之后dict的key相同,那肯定就不行了呀!况且,如果原始列表不是两个,而是多个,肯定不能用字典的呀!于是这种方法作罢,还是好好看看列表的形状。

然后又是一个不小心的发现:

Python实现矩阵转置的方法分析

这种转置矩阵的即时感是怎么回事?

没错,这个问题的本质就是求解转置矩阵。于是就简单了,还是用个不动脑筋的办法:

def trans(m):
  for i in range(len(m)):
    for j in range(i):
      m[i][j], m[j][i] = m[j][i], m[i][j]
  return m
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print trans(m)

其实还是有点bug的,看起来是好用的,然而这个矩阵要求行列长度相同才行。

最后,群里某大神说:如果只是转置矩阵的话,直接zip就好了。这才想起来zip的本质就是这样的,取出列表中的对应位置的元素,组成新列表,正是这个题目要做的。

所以最终,这个题目(转置矩阵)的python解法就相当奇妙了:

def trans(m):
  return zip(*d)

没错,就这么简单。python的魅力。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python的Flask框架中@app.route的用法教程
Mar 31 Python
Python读取图片属性信息的实现方法
Sep 11 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
WxPython建立批量录入框窗口
Feb 27 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
python实现简单的tcp 文件下载
Sep 16 Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 #Python
利用python3随机生成中文字符的实现方法
Nov 24 #Python
Python内置函数 next的具体使用方法
Nov 24 #Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 #Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 #Python
Python内置函数——__import__ 的使用方法
Nov 24 #Python
Django中login_required装饰器的深入介绍
Nov 24 #Python
You might like
PHP整合七牛实现上传文件
2015/07/03 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
【消息提示组件】,兼容IE6/7&&FF2
2007/09/04 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
js实现图片实时时钟
2020/01/15 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
python实现自动发送报警监控邮件
2018/06/21 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
与UNIX有关的几个名词
2015/09/17 面试题
电大物流学生的自我评价
2013/10/25 职场文书
先进事迹报告会感言
2014/01/24 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
通报表扬范文
2015/01/17 职场文书
mybatis 获取更新记录的id
2022/05/20 Java/Android