python实现矩阵的转置_Python实现矩阵转置的方法分析

python实现矩阵的转置_Python实现矩阵转置的方法分析本文实例讲述了Python实现矩阵转置的方法。分享给大家供大家参考,具体如下:前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1,2],之后不断的添加新的列表,往原来相应位置添加。例如添加[3,4]使原列表扩充为[[1,3],[2,4]],再添加[5,6]扩充为[[1,3,5],[2,4,6]]等等。其实不动脑筋的话,用个二重循环很容易写出来:def…

大家好,又见面了,我是你们的朋友全栈君。

本文实例讲述了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相同,那肯定就不行了呀!况且,如果原始列表不是两个,而是多个,肯定不能用字典的呀!于是这种方法作罢,还是好好看看列表的形状。

然后又是一个不小心的发现:

4070e6f576d41c720a9a27e5fcf8dc7c.png

这种转置矩阵的即时感是怎么回事?

没错,这个问题的本质就是求解转置矩阵。于是就简单了,还是用个不动脑筋的办法:

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程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138822.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • springboot|springboot连接mysql数据库

    springboot|springboot连接mysql数据库javaDEMO本网站记录了最全的各种JavaDEMO,保证下载,复制就是可用的,包括基础的,集合的,spring的,Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~https://www.javastudy.cloud配置springboot连接mysql数据库主要分以下几步:添加gradle/maven依赖配置数据库url,用户名,密码等等在Cont…

    2022年6月25日
  • vue响应式原理(数据双向绑定的原理)[通俗易懂]

    vue响应式原理(数据双向绑定的原理)[通俗易懂]先来了解一下几个相关概念1、渐进式框架下面是摘自知乎的一个解答(个人认为讲述比较好的回答):在我看来,渐进式代表的含义是:主张最少。每个框架都不可避免会有自己的一些特点,从而会对使用者有一定的要求,这些要求就是主张,主张有强有弱,它的强势程度会影响在业务开发中的使用方式。比如说,Angular,它两个版本都是强主张的,如果你用它,必须接受以下东西:-必须使用它的模块机制-必须…

    2022年6月14日
  • 全网最硬核解读计算机启动原理

    全网最硬核解读计算机启动原理

    2020年11月20日
  • fork join语句_java forkjoinpool

    fork join语句_java forkjoinpool借鉴大数据里分而治之的思想

    2022年9月20日
  • map与java对象相互转换

    map与java对象相互转换最近,研究map与java对象之间的相互转换,总结了5种方法:第一种:使用org.apache.commons.beanutils转换用到的主要jar包:commons-beanutils-1.9.3.jar//map转java对象publicstaticObjectmapToObject(Map<String,Object>map,Class<?&g…

    2022年6月11日
  • Ubuntu上Github下载慢的问题解决方法记录

    1.参考了这篇博客https://www.jianshu.com/p/0493dcc15d6f2.追加域名的IP地址我们可以利用https://www.ipaddress.com/来获得以下两个GitHub域名的IP地址:(1)github.com(2)github.global.ssl.fastly.net打开网页:得到的github.com的ip为:140…

    2022年4月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号