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基于有道实现英汉字典功能
Jul 25 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
举例讲解Python装饰器
Dec 24 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 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的FTP学习(二)[转自奥索]
2006/10/09 PHP
一个ftp类(ini.php)
2006/10/09 PHP
Smarty+QUICKFORM小小演示
2007/02/25 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
原生js实现日历效果
2020/03/02 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
介绍下Lucene建立索引的过程
2016/03/02 面试题
汉语专业应届生求职信
2013/10/01 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
培训科主任岗位职责
2014/08/08 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
工作岗位职责范本
2015/02/15 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python