python实现矩阵转置的几种方法

文章目录

  • (1)方法一、使用numpy转置
  • (2)方法二、使用zip()函数
  • (3)方法三、使用python列表表达式【不占用额外空间,“原地修改”】
  • (4)方法四、新建列表B,使用双重循环添加元素

(1)方法一、使用numpy转置

import numpy as npA = np.mat([[1,2,3],[4,5,6],[7,8,9]])print(A.T)print(A.swapaxes(0, 1))# 均输出# [[1 4 7]#  [2 5 8]#  [3 6 9]]
import numpy as npA = [[1,2,3],[4,5,6],[7,8,9]]print(np.transpose(A))# 输出# [[1 4 7]#  [2 5 8]#  [3 6 9]]

(2)方法二、使用zip()函数

  • zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
  • 可以使用 list() 转换来输出列表。【zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。】
  • 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。

zip(A)相当于打包,打包为元组的列表

>>> a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> A = zip(a,b)     # 打包为元组的列表[(1, 4), (2, 5), (3, 6)]>>> zip(a,c)              # 元素个数与最短的列表一致[(1, 4), (2, 5), (3, 6)]>>> zip(*A)          # 与 zip 相反,*A 可理解为解压,返回二维矩阵式[(1, 2, 3), (4, 5, 6)]
A = [[1,2,3],[4,5,6],[7,8,9]]print(*A) #[1, 2, 3] [4, 5, 6] [7, 8, 9]#zip()返回的是一个对象。如需展示列表,需手动 list() 转换。#print(zip(*A)) #<zip object at 0x000001CD7733A2C8>print(list(zip(*A)))# 输出# [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

这里python中星号(*)的作用是将变量中可迭代对象的元素拆解出来。

(3)方法三、使用python列表表达式【不占用额外空间,“原地修改”】

A = [[1,2,3],[4,5,6],[7,8,9]]#print(len(A)) #矩阵行数#print(len(A[0])) #矩阵列数B = [[A[j][i] for j in range(len(A))] for i in range(len(A[0]))]print(B)# 输出# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
B = [[A[j][i] for j in range(len(A))] for i in range(len(A[0]))]

这句写的清楚一点就是:

A = [[1,2,3],[4,5,6],[7,8,9]]#print(len(A)) #矩阵行数#print(len(A[0])) #矩阵列数for i in range(len(A[0])):#len(A[0])矩阵列数    for j in range(len(A)):#len(A)矩阵行数        #转置就是A[i][j]和A[j][i]互换        A[j][i], A[i][j] = A[i][j], A[j][i]print(A)# 输出# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

因为转置矩阵的对称性,可以更省时间的写成:

A = [[1,2,3],[4,5,6],[7,8,9]]#print(len(A)) #矩阵行数#print(len(A[0])) #矩阵列数for i in range(len(A[0])):#len(A[0])矩阵列数    for j in range(i,len(A)):#len(A)矩阵行数        #转置就是A[i][j]和A[j][i]互换        A[j][i], A[i][j] = A[i][j], A[j][i]print(A)# 输出# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

(4)方法四、新建列表B,使用双重循环添加元素

A = [[1,2,3],[4,5,6],[7,8,9]]B=[]for i in range(len(A[0])):#len(A[0])矩阵列数    temp = []    for j in range(len(A)):#len(A)矩阵行数        temp.append(A[j][i])    B.append(temp)print(B)# 输出# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
(0)

相关推荐

  • 第 109 天:NumPy 矩阵

    机器学习中会用到大量的数学操作,而 Numpy 计算库使这些操作变得简单,这其中就涉及到了 Numpy 的矩阵操作,下面我们就来一起学习如何在 Numpy 科学计算库中进行矩阵的一些基本运算. 1 矩 ...

  • 成功解决Python中出现的TypeError: object of type 'zip' has no len()

    成功解决Python中出现的TypeError: object of type 'zip' has no len() 不罗嗦,直接解决问题! 解决问题 TypeError: object of typ ...

  • Python 中的神秘运算符

    今天我们来讲讲 Python 里一个不为众人所知的运算符.你可能会觉得疑惑:还有我不知道的运算符?别急着下结论,先往下看看再说. 在 Python3.5 中通过 PEP465 (https://www ...

  • Python+webdriver定位元素的几种方法

    一.selenium定位元素的几种方法 selenium2.0=selenium1.0+webdriver selenium定位元素的几种方法:WebDriver,selenium IDE,selen ...

  • Python 中交换变量的 3 种方法

    2021-10-16 使用临时变量 交换两个变量值的最简单方法是使用temp变量.该temp变量用来存储拳头变量的值(temp = a),允许你交换两个变量的值(a = b),然后分配的值temp到所 ...

  • python中统计计数的几种方法

    打开QQ浏览器,查看高清大图 以下实例展示了 count() 方法的使用方法: 打开QQ浏览器,查看高清大图 以上实例输出结果如下: 1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果 ...

  • Selenium2+python自动化65-js定位几种方法总结

    前言 一.以下总结了5种js定位的方法 除了id是定位到的是单个element元素对象,其它的都是elements返回的是list对象 1.通过id获取 document.getElementById ...

  • Python 保存数据的方法(4种方法)

    Python 保存数据的方法: open函数保存 使用with open()新建对象 写入数据(这里使用的是爬取豆瓣读书中一本书的豆瓣短评作为例子) ? 1 2 3 4 5 6 7 8 9 10 11 ...

  • Python代码运行慢怎么办?这五种方法要谨记!

    对于Python很多人还是比较了解的,虽然说Python有很多优势但同样具有劣势,Python最大的劣势就是运行效率慢,那么如何提高Python代码运行速度呢?这五种方法很管用. 1.PyPy:在选择 ...

  • python 读取并显示图片的两种方法

    在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...

  • Excel实战技巧105:转置数据的3种方法

    excelperfect 所谓转置数据,就是将数据从水平转变成垂直,或者从垂直转变成水平.换句话说,在Excel工作表中,将行中的数据转变到列中,将列中的数据转变到行中.下面将展示3种转置数据的方法: ...

  • Python反转三位整数有几种方法?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...