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

python实现矩阵转置的几种方法文章目录(1)方法一、使用numpy转置(2)方法二、使用zip()函数(3)方法三、使用python列表表达式【不占用额外空间,“原地修改”】(4)方法四、新建列表B,使用双重循环添加元素(1)方法一、使用numpy转置importnumpyasnpA=np.mat([[1,2,3],[4,5,6],[7,8,9]])print(A.T)print(A.swapaxes(0,1))#均输出#[[147]#[258]#[369]]importnum

大家好,又见面了,我是你们的朋友全栈君。

(1)方法一、使用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]]

(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]]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137267.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月2日 上午10:46
下一篇 2022年6月2日 上午10:46


相关推荐

  • linux安装配置Mysql详细步骤

    linux安装配置Mysql详细步骤下载Mysqlrpm包官网下载:https://dev.mysql.com/downloads/mysql/如果你到了这里,本地应该有了如下四个rpm包:mysql-community-client-5.7.26-1.el6.x86_64.rpmmysql-community-common-5.7.26-1.el6.x86_64.rpmmysql-community-libs-5…

    2022年4月29日
    57
  • css flex布局实现文字垂直居中

    css flex布局实现文字垂直居中<style>.innner{display:flex;background-color:#ea4d22;height:100px;/*line-height:100px;*//*text-align:center;*/justify-content:center;flex-direction:column;}.i.

    2022年6月5日
    36
  • JAVA学习篇–静态代理VS动态代理[通俗易懂]

    JAVA学习篇–静态代理VS动态代理[通俗易懂]本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢?原因:1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者的区别是什么呢?2,通过学习动态代理了解到动态代理是一种符合AOP设计思想的技术,那就更有必要总结了!下面是我对它们的理解! 代理Proxy: Proxy代理模式是一种结构型设计模式,

    2022年10月21日
    5
  • 最大熵模型原理小结

    最大熵模型原理小结最大熵模型 MaximumEntro 是一种很经典的分类算法 理解它有助于加深我们对逻辑回归 支持向量机 决策树等算法的理解 最大熵模型是将最大熵原理应用到分类任务得到的模型 在解释最大熵原理和最大熵模型之前 先简单对熵的概念进行一下回顾 1 熵 信息论的基本想法是发生一个不太可能发生的事件比发生一个非常可能发生的事件能提供更多的信息 比如说 今天早上太阳升起

    2025年9月25日
    5
  • stringbuffer和stringbuilder是什么_Java编程

    stringbuffer和stringbuilder是什么_Java编程字符串常量池什么是字符串常量池?JVM为了减少字符串对象的重复创建,其维护了一块特殊的内存,这段内存被称为字符串常量池(存储在方法区中)。具体实现当代码中出现字符串时,JVM首先会对其进行检查。如果字符串常量池中存在相同内容的字符串对象,则将这个对象的地址返回。如果字符串常量池中不存在相同内容的字符串对象,则创建一个新的字符串对象并放入常量池。newString(“str…

    2025年11月21日
    9
  • mac lion 系统安装

    mac lion 系统安装注意 低版本升级必须要全新安装 分区最多只能够分四个区 mac 一个区 win7 一个区 文档存储 2 个区 如果无需这么多盘也没关系 可以自己设定 一般 unix 系统只使用一个盘 那样文件操作会比较顺畅 分区次序 倒数第一个区必须安装 Mac 系统 倒数第二个区可以用来安装 Win7 系统 剩余的盘可以用来作为数据存储盘 下面介绍安装的流程 1 关闭电脑 接上 u 盘 点开机后马上按住 option 键不放 等待

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号