有个朋友提出了一个问题:手头上现在有一个二维列表,比如[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],现在要把该二维列表变成为[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]。

其实不动脑筋的话,用二重循环很容易写出来:

#! /usr/bin/env python3
# -*- coding:utf-8 -*- # Author : mayi
# Blog : http://www.cnblogs.com/mayi0312/
# Date : 2019/4/26
# Name : test01
# Software : PyCharm
# Note : 用于实现实现矩阵(二重列表)转置 def trans(l):
a = [[] for i in l[0]]
for i in l:
for j in range(len(i)):
a[j].append(i[j]) return a # 主函数
def main():
l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] l2 = trans(l1)
print(l1) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
print(l2) # [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]] # 入口函数
if __name__ == '__main__':
main()

然而不管怎么看这种代码都很丑。

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

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

#! /usr/bin/env python3
# -*- coding:utf-8 -*- # Author : mayi
# Blog : http://www.cnblogs.com/mayi0312/
# Date : 2019/4/26
# Name : test01
# Software : PyCharm
# Note : 用于实现实现矩阵(二重列表)转置 def trans(l):
for i in range(len(l)):
for j in range(i):
l[i][j], l[j][i] = l[j][i], l[i][j] return l # 主函数
def main():
l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] l2 = trans(l1)
print(l1) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(l2) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]] # 入口函数
if __name__ == '__main__':
main()

其实上面代码还是有点bug,看起来是好用的,然而用这种方法矩阵要求行列长度相同才行。

最后,我们想起了zip。zip的本质就是这样的,取出列表中的对应位置的元素,组成新列表,正是这个题目要做的。

所以最终,这个题目(转置矩阵)的Python解法就相当奇妙了:

#! /usr/bin/env python3
# -*- coding:utf-8 -*- # Author : mayi
# Blog : http://www.cnblogs.com/mayi0312/
# Date : 2019/4/26
# Name : test01
# Software : PyCharm
# Note : 用于实现实现矩阵(二重列表)转置 def trans(l):
l = zip(*l)
l = [list(i) for i in l] return l # 主函数
def main():
l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] l2 = trans(l1)
print(l1) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
print(list(l2)) # [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]] # 入口函数
if __name__ == '__main__':
main()

Python - 实现矩阵转置的更多相关文章

  1. 用python实现矩阵转置

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...

  2. 用python实现矩阵转置,python3 中zip()函数

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...

  3. [转]Python中的矩阵转置

    Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...

  4. 关于python中矩阵的实现和矩阵的转置

    python中矩阵的实现是靠序列,,, 序列有很多形式, 其实矩阵是现实生活中的东西,把现实生活中的结构转换到程序中. 就需要有个实现的方法,而这种路径是多种多样的. 下面给出一个把矩阵转换成pyth ...

  5. Python小代码_5_二维矩阵转置

    使用列表推导式实现二维矩阵转置 matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] print(matrix) matrix_t = [[ro ...

  6. python 矩阵转置

    arrA=[[,,,],[,,,],[,,,],[,,,]] N= #声明4x4数组arr arrB=[[None] * N for row in range(N)] print('[原设置的矩阵内容 ...

  7. B-线性代数-矩阵转置

    [TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...

  8. <矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置>

    //矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置 #include<stdio.h> #include<stdlib.h> #define M 2 #define N 3 #d ...

  9. 【异构计算】OpenCL矩阵转置

    介绍 矩阵转置,主要的技巧还是利用好local memory ,防止local memory,以及glabol memory的读取尽量是合并读写. 完整代码一: main.cpp代码 #include ...

随机推荐

  1. Kibana 学习资料

    Kibana 学习资料 网址 Kibana 官方文档 https://s0www0elastic0co.icopy.site/guide/en/kibana/current/introduction. ...

  2. FastDFS 分布式文件系统(部署和运维)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/KamRoseLee/article/det ...

  3. 19-C#笔记-多态性

    # 静态多态性 --- ## 1 函数重载 和C++一样. --- ## 2 运算符重载 public static operator public static Box operator+ (Box ...

  4. 趣味编程:静夜思(C++17 Ranges版)

    #include <iostream> #include <range/v3/all.hpp> #include <vector> #include <loc ...

  5. ubuntu使用anaconda安装tensorflow

    https://blog.csdn.net/shiheyingzhe/article/details/80863422 https://blog.csdn.net/sheyanshangjiang/a ...

  6. 自用ftp上传脚本

    #!/bin/sh backupserver=$1 #localdir=ftp_result_tmp username=$3 password=$4 #remodir='./Log/2018-01-2 ...

  7. Rotor里的异常处理

    我看到了一些关于Rotor(和CLR)中使用的异常处理机制的问题.下面是关于Rotor异常处理的另一个注意事项列表.目的是帮助Rotor开发人员调试和理解CLR中的异常. 异常生成和抛出 此步骤在很大 ...

  8. css规范思维导图(仅限于自己)

  9. 浅谈Asp.Net中的几种传值方式

    一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是 ...

  10. vs启动报4.X的错

    参考: https://www.cnblogs.com/zsx-blog/p/6136956.html https://blog.csdn.net/lishaoran369/article/detai ...