Python - 实现矩阵转置
有个朋友提出了一个问题:手头上现在有一个二维列表,比如[[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 - 实现矩阵转置的更多相关文章
- 用python实现矩阵转置
前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...
- 用python实现矩阵转置,python3 中zip()函数
前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...
- [转]Python中的矩阵转置
Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...
- 关于python中矩阵的实现和矩阵的转置
python中矩阵的实现是靠序列,,, 序列有很多形式, 其实矩阵是现实生活中的东西,把现实生活中的结构转换到程序中. 就需要有个实现的方法,而这种路径是多种多样的. 下面给出一个把矩阵转换成pyth ...
- Python小代码_5_二维矩阵转置
使用列表推导式实现二维矩阵转置 matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] print(matrix) matrix_t = [[ro ...
- python 矩阵转置
arrA=[[,,,],[,,,],[,,,],[,,,]] N= #声明4x4数组arr arrB=[[None] * N for row in range(N)] print('[原设置的矩阵内容 ...
- B-线性代数-矩阵转置
[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...
- <矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置>
//矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置 #include<stdio.h> #include<stdlib.h> #define M 2 #define N 3 #d ...
- 【异构计算】OpenCL矩阵转置
介绍 矩阵转置,主要的技巧还是利用好local memory ,防止local memory,以及glabol memory的读取尽量是合并读写. 完整代码一: main.cpp代码 #include ...
随机推荐
- 如何让ThinkPHP支持模糊搜索
最近ytkah在做一个ThinkPHP的项目时发现了一个问题,搜索的功能只能检索出以*为开头的内容,不能检索出中间的词.例如:搜索包含6775的产品,搜索结果为空,而搜索000-6775 就有两个结果 ...
- 【oracle】update 某字段为null
字段 = null 注意这个字段要可以为空
- vue : 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\vue.ps1
最近因为电脑太卡,小颖把电脑重装了,重装后再执行 npm install -g @vue/cli 时可能是网络问题,一直不能成功,小颖就把npm指向了淘宝镜像: npm install -g cnpm ...
- GoogleHacking语法篇
常用GoogleHacking语法: 1.intext:(仅针对Google有效) 把网页中的正文内容中的某个字符作为搜索的条件 2.intitle: 把网页标题中的某个字符作为搜索的条件 3.cac ...
- 2013(1)需求工程, 需求开发, 需求分析, 面向对象需求分析, UML,需求建模
案例一 某软件公司拟为物流企业开发一套库存管理系统,该系统的部分需求陈述如下: (1) 库存管理系统主要包括货物入库管理.货物出库管理.仓库管理.统计报表和系统管理等功能. (2) 库存管理系统的用户 ...
- vb.net 判断某个文件是否已经打开了
' 判断这个excel文件是否已经打开了: 如果打开了,不能下载 Try Dim fs AsFileStream = NewFileStream(excelFileName, FileMode.O ...
- virtualbox安装问题总结
还是老问题 重点重点: https://blog.csdn.net/Loisleen/article/details/84975165#1install_the_gcc_make_perl_packa ...
- No module named 'paddle.fluid'
问题 win10笔记本,安装了paddlepadde,但是仍然报错,No module named 'paddle.fluid'. 解决 在py文件中,我先下载并且引入了paddle,后来又安装.引入 ...
- eclipse&myeclipse 生成jar包后,spring无法扫描到bean定义
问题:eclipse&myeclipse 生成jar包后,spring无法扫描到bean定义 在使用getbean或者扫包时注入bean失败,但在IDE里是可以正常运行的? 原因:导出jar未 ...
- .NET 微服务 学习目录
概述 微服务在Java端已经有很成熟的框架可以使用,之前.NET一直没有比较成熟的网关,最近发现 Ocelot 这个.NET开源的微服务网关功能越来越强大,正好照着微软的官方文档学些一下.NET的微服 ...