M行N列矩阵的转置

  • 说明
    • 解决方法
      • 1. 预定义一个存放矩阵a[M][N]的转置矩阵b[N][M]
      • 2. 使用 列表生成式 进行矩阵的转换:
      • 3. 使用 zip()函数,map()函数,解包 的组合来实现矩阵转置:

说明

当我们使用 JAVA或者C语言 对矩阵a进行矩阵转置时,主要思路是:先获得矩阵a的行M和列N,然后再生成一个b[N][M]的矩阵,最后执行b[N][M]=a[M][N]操作。那么对于Python语言应该如何进行矩阵的转置呢?

解决方法

1. 预定义一个存放矩阵a[M][N]的转置矩阵b[N][M]

首先我们当然可以使用和JAVAC语言相同的办法解决这个问题.预定义一个存放矩阵a[M][N]的转置矩阵b[N][M]

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]
"""预定义一个存放a转置的空间:b=[[],[],[]]"""
b = [[] for col in range(len(a[0]))]
"""转置"""
for row in range(len(a)):for col in range(len(a[0])):b[col].append(a[row][col])  # a矩阵的列是b矩阵的行
print(b)

2. 使用 列表生成式 进行矩阵的转换:

首先考虑第一种预先定义一块转置矩阵存储空间的方法,类似于:

b = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]

如果想要使用列表生成式来形成上面的b矩阵,可以先生成三行,再在每一行生成5个0。
生成行的列表生成式1是:

[[] for col in range(len(a[0]))]

在每一行生成0的列表生成式2是:

[0 for row in range(len(a))]

如果将上面两个生成式嵌套在一起,得到列表生成式3

b = [[0 for row in range(len(a))] for col in range(len(a[0]))]

就可以得到下面的预存储矩阵空间:

b = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]

那么问题来了:
我们能不能把列表生成式2中的0直接更改为我们的a矩阵转置之后的元素值呢?
答案是可以的,于是就得到了列表生成式4

c = [[a[row][col] for row in range(len(a))] for col in range(len(a[0]))]

使用列表生成式4可以直接得到a矩阵的转置

3. 使用 zip()函数,map()函数,解包 的组合来实现矩阵转置:

zip()函数
它可以将多个序列(列表、元组、字典、集合、字符串以及 range() 区间构成的列表)“压缩”成一个 zip 对象。所谓“压缩”,其实就是将这些序列中对应位置的元素重新组合,生成一个个新的元组。
map()函数
会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

解包

解包就是把一个容器拆开、分解,在Python中的解包是自动完成的。

zip()map()都是常用的函数,而解包不常见,现在对解包做解释:

  1. 任何可迭代对象都可以解包

  2. 解包的使用方法是在可迭代对象的前面加*,解包分为一个*解包,和两个 *解包,两个*解包只能出现在字典中

  3. 所谓解包,就是剥去外衣,留下核心,例如:
    对以下可迭代对象解包的结果:

列表:

d = [1,2,3]
print(*d)   # 结果:1,2,3

字符串:

d = 'abcd'
print(*d)   # 结果:a b c d

字典:
使用一个*对字典解包:

d = {'f': 1, 'b': 2, 'c': 3}
print(*d)   # 结果:f b c

使用两个*对字典解包:

d = {'f': 1, 'b': 2, 'c': 3}
def fun(f, b, c):print(f, b, c)
fun(**d)    # 结果:1 2 3

注意:使用一个*对字典解包,得到的是字典的key值。而使用两个*对字典解包时,得到的是去掉大括号之后的key:value,key:value,...(我的理解,如果错误请指正)
所以如果使用print()函数直接打印print(**d)会报:invalid keyword argument for print()的错误。
所以:对字典两个*的解包一般用于函数参数的传递,并且要求被解包的字典的键名(key)和函数的形参名字相同。例如上面对字典解包的例子。

有了上面的知识支持,现在就可以进行矩阵的转置了,最终代码是:

d = list(map(list,zip(*a)))

【Python】实现M行N列的矩阵转置相关推荐

  1. 使用Python批量处理行、列和单元格

    使用Python批量处理行.列和单元格 精确调整工作表的行高和列宽 批量更改多个工作簿的数据格式 批量更改工作簿的外观格式 设置字体格式 修改字体为宋体 修改字号 字体加粗 字体颜色 单元格填充颜色 ...

  2. 练习-输入M行N列的矩阵A和B,编程计算并输出矩阵A与B之和

    第1关:输入M行N列的矩阵A和B,编程计算并输出矩阵A与B之和 任务描述 本关任务:输入两个m行n列的矩阵A和B,输出它们的和A+B. 测试说明 输入格式说明 第一行包含两个整数n和m,表示矩阵的行数 ...

  3. 有一个m行n列的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号。

    [题目描述] 有一个m行n列的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号.(如果最大数有多个,则显示第一个出现的数据的信息). [输入] 有多行.第1行是两个整数,m(m≤10)和n( ...

  4. 在matlab中把m行*n列的矩阵一行一行的展开成单行m*n列的矩阵

    在MATLAB中,可以使用reshape函数将一个m行n列的矩阵展开成一个单行m*n列的矩阵. 假设原始矩阵为A,可以使用以下代码将其展开成单行矩阵B: B = reshape(A', 1, []); ...

  5. Matlab Mathematica 向量(行,列) 矩阵

    Matlab: 矩阵用方括号[]表示,元素之间用"," 或者 空格 隔开,行与行之间用分号";"隔开: mat = [1 2 3 4;4 5 6 7 ] 或者 ...

  6. python 切片取最后一列_python矩阵的切片(或截取)

    矩阵一般有行也有列,所以矩阵的截取也需要包含行和列两个参数. 假设a是一个矩阵,a的截取就可写成:a[起始行:终止行,起始列:终止列],中括号中有一个逗号,逗号前的是为了分割行的,逗号后的是为了分割列 ...

  7. matlab 行 列表示,Matlab Mathematica 向量(行,列) 矩阵

    Matlab: 矩阵用方括号[]表示,元素之间用"," 或者 空格 隔开,行与行之间用分号";"隔开: mat = [ 1 2 3 4; 4 5 6 7 ] 或 ...

  8. python.pandas.DataFrame行转列

    我们这里行转列使用的是stack方法和unstack方法. stack:将列转为行. unstack:将行转为列.(默认操作为最内层,可用分层级别的编号或名称对其他级别进行unstack) data ...

  9. python transpose函数_Numpy之np.transpose矩阵转置

    对于一维数组: >>> import numpy as np >>> t=np.arange(4)  #  插入值0-3 >>> t array( ...

最新文章

  1. 为人父母始知天下事---“宝宝哭了”的问题来说说什么是分析,什么是设计
  2. 2.1.1 正则化基本介绍
  3. 开发函数计算的正确姿势———为 PHP 运行时添加自定义扩展
  4. hdu5126stars
  5. 防水耐脏,超大容量双肩包,限时拼团仅需49元
  6. 在线JSON转io-ts工具
  7. XCode各种告警处理
  8. vue实现树形结构增删改查
  9. Hibernate的学习详解(4)
  10. 华为交换机几种端口属性
  11. 通用删除查询语句存储过程
  12. PS批量制作获奖证书并导出PNG
  13. iPhone手机开启定位权限后,仍然无法定位
  14. 帕斯卡恒等式(二项式相关
  15. nuxt实现服务端渲染查看源代码显示动态接口数据
  16. 科技论文中字母正斜体及大小写的规范写法
  17. oracle 11g 新特性之动态绑定变量窥视(一)
  18. 如何裁剪图片,裁剪图片的几个方法
  19. 浏览器配置存在问题。。360断网急救箱未能修复
  20. 常用音频工具介绍与汇总

热门文章

  1. 车间作业排序 java,9.4 派工单与作业排序
  2. Office打开很慢解决办法
  3. 京东一面:Spring Boot 如何热加载jar实现动态插件?
  4. 柏楚电子晶晨股份正式在科创板上市 柏楚电子开盘价高达217元
  5. 阿里妈妈账号登录状态如何长时间保存
  6. android锁屏(三)
  7. Linux学习之文本查找编辑替换命令
  8. 穿山甲广告SDK手动初始化解决方案
  9. android资源文件转bitmap,Android 之 Bitmap 和 File 相互转换
  10. 省市县街道村五级联动