Python实现矩阵转置的几种方法详解

 更新时间:2023年08月22日 14:19:50   作者:夏普通  
这篇文章主要介绍了Python实现矩阵转置的几种方法详解,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存,需要的朋友可以参考下

Python实现矩阵转置

转置矩阵意味着我们将其列变为行。让我们通过一个例子来理解它,如果转置后看起来像什么。

假设您有原始矩阵,例如-x = [[1,2][3,4][5,6]]

在上面的矩阵“ x”中,我们有两列,分别为1、3、5和2、4、6。

因此,当我们在矩阵“ x”上方转置时,列变为行。因此,上面矩阵的转置版本看起来像-x1 = [[1, 3, 5][2, 4, 6]]

因此,我们有另一个矩阵“ x1”,在不同的位置以不同的值组织不同。

方法一、使用numpy转置

import numpy as np
A = 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 np
A = [[1,2,3],[4,5,6],[7,8,9]]
print(np.transpose(A))

# 输出
# [[1 4 7]
#  [2 5 8]
#  [3 6 9]]

方法二、使用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中星号(*)的作用是将变量中可迭代对象的元素拆解出来。

方法三、使用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(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]]

因为转置矩阵的对称性, for j in range(i,len(A)) 限制了只遍历矩阵上三角,必须要限制,如果不限制会导致重复交换。

方法四、新建列表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]]

到此这篇关于Python实现矩阵转置的几种方法详解的文章就介绍到这了,更多相关Python实现矩阵转置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中的class_static的@classmethod的巧妙用法

    python中的class_static的@classmethod的巧妙用法

    python中的class_static的@classmethod的使用 classmethod的使用,主要针对的是类而不是对象,在定义类的时候往往会定义一些静态的私有属性,今天通过示例代码看下classmethod的妙用
    2021-06-06
  • python3.7.3版本和django2.2.3版本是否可以兼容

    python3.7.3版本和django2.2.3版本是否可以兼容

    在本篇文章里小编给大家整理的是一篇关于python3.7.3版本和django2.2.3版本是否可以兼容的相关知识点内容,有兴趣的朋友们可以学习下。
    2020-09-09
  • python运算符号详细介绍

    python运算符号详细介绍

    大家好,本篇文章主要讲的是python运算符号详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 带你一文搞懂Python文件的读写操作

    带你一文搞懂Python文件的读写操作

    读写文件是最常见的IO操作,Python内置了读写文件的函数,下面这篇文章主要给大家介绍了关于Python文件读写操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • python爬虫模拟浏览器访问-User-Agent过程解析

    python爬虫模拟浏览器访问-User-Agent过程解析

    这篇文章主要介绍了python爬虫模拟浏览器访问-User-Agent过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 基于Python实现面向对象版学生管理系统

    基于Python实现面向对象版学生管理系统

    这篇文章主要为大家详细介绍了如何利用python实现学生管理系统(面向对象版),文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • python实现txt文件格式转换为arff格式

    python实现txt文件格式转换为arff格式

    这篇文章主要为大家详细介绍了python实现txt文件格式转换为arff格式的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)

    浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)

    本篇文章主要介绍了浅谈tensorflow1.0 池化层(pooling)和全连接层(dense),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 改变 Python 中线程执行顺序的方法

    改变 Python 中线程执行顺序的方法

    这篇文章主要介绍了改变 Python 中线程的执行顺序的方法,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • 详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案

    详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案

    这篇文章主要介绍了详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论