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函数返回多个值的示例方法
Dec 04 Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
python技能之数据导出excel的实例代码
Aug 11 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
Python numpy 点数组去重的实例
Apr 18 Python
Python logging模块用法示例
Aug 28 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
详解python调用cmd命令三种方法
Jul 08 Python
python可视化实现KNN算法
Oct 16 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
python RSA加密的示例
Dec 09 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
layui分页效果实现代码
2017/05/19 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
python求素数示例分享
2014/02/16 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
优秀员工自荐书范文
2013/12/08 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
销售开票员岗位职责
2015/04/15 职场文书
起诉书格式范文
2015/05/20 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
Window server中安装Redis的超详细教程
2021/11/17 Redis
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android