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实现批量转换文件编码(批转换编码示例)
Jan 23 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
Python中使用PDB库调试程序
Apr 05 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
tensorflow获取变量维度信息
Mar 10 Python
详解python 注释、变量、类型
Aug 10 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
Django中的静态文件管理过程解析
Aug 01 Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 Python
Python实现简单猜数字游戏
Feb 03 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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新手入门学习方法
2011/05/08 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
js简单抽奖代码
2015/01/16 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
高考考python编程是真的吗
2020/07/20 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
上班玩手机检讨书
2014/02/17 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
个人担保书格式范文
2014/05/12 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
放射科岗位职责
2015/02/14 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
python中的sys模块和os模块
2022/03/20 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python