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解释执行原理分析
Aug 22 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
利用python和百度地图API实现数据地图标注的方法
May 13 Python
python语言线程标准库threading.local解读总结
Nov 10 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
sklearn的predict_proba使用说明
Jun 28 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
numpy数据类型dtype转换实现
Apr 24 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
jquery动态添加option示例
2013/12/30 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
Python3 批量扫描端口的例子
2019/07/25 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
构造器Constructor是否可被override?
2013/08/06 面试题
医生自荐信
2013/10/11 职场文书
公司业务主管岗位职责
2013/12/07 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
房产公证书范本
2014/04/10 职场文书
管理提升方案
2014/06/04 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
ipad隐藏软件app图标方法
2022/04/19 数码科技