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中的pydoc模块和distutils模块
Apr 13 Python
Python中处理字符串之isalpha()方法的使用
May 18 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
python实现简单购物商城
May 21 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
May 31 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
Django之编辑时根据条件跳转回原页面的方法
Aug 21 Python
python绘制BA无标度网络示例代码
Nov 21 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
vscode+PyQt5安装详解步骤
Aug 12 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用header函数实现301跳转代码实例
2013/11/25 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
Python多线程下载文件的方法
2015/07/10 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
Python3中的bytes和str类型详解
2019/05/02 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
保时捷设计:Porsche Design
2019/03/30 全球购物
Python如何定义一个函数
2015/09/01 面试题
大学生四年生活自我鉴定
2013/11/21 职场文书
物业总经理岗位职责
2014/02/28 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
高三英语教学反思
2016/03/03 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技