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实现随机密码字典生成器示例
Apr 09 Python
python测试驱动开发实例
Oct 08 Python
Python实现测试磁盘性能的方法
Mar 12 Python
Python定时执行之Timer用法示例
May 27 Python
使用Python从有道词典网页获取单词翻译
Jul 03 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
Keras自定义IOU方式
Jun 10 Python
Python爬取网页信息的示例
Sep 24 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连接access数据库
2015/03/27 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
jquery 插件开发备注
2010/08/27 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
javascript的push使用指南
2014/12/05 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Python中请不要再用re.compile了
2019/06/30 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
html5 标签
2009/07/16 HTML / CSS
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
中学生社会实践活动总结
2014/07/03 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
前台接待岗位职责
2015/02/03 职场文书
学校工会工作总结2015
2015/05/19 职场文书
植树节新闻稿
2015/07/17 职场文书