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 相关文章推荐
rhythmbox中文名乱码问题解决方法
Sep 06 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
Python实现Kmeans聚类算法
Jun 10 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
Jul 31 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
python随机生成库faker库api实例详解
Nov 28 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
Python 判断时间是否在时间区间内的实例
May 16 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 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新手上路(十三)
2006/10/09 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
php中文验证码实现方法
2015/06/18 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
获取body标签的两种方法
2011/10/13 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
python调用java的Webservice示例
2014/03/10 Python
PyMongo安装使用笔记
2015/04/27 Python
python常见数制转换实例分析
2015/05/09 Python
Python中几个比较常见的名词解释
2015/07/04 Python
python实现高斯投影正反算方式
2020/01/17 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
大学生个人自荐信样本
2014/03/02 职场文书
给公司的建议书范文
2014/05/13 职场文书
好媳妇事迹材料
2014/12/24 职场文书
党员年终个人总结
2015/02/14 职场文书
初中运动会前导词
2015/07/20 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL