python实现矩阵转置的几种方法
2023-06-13 09:11:56 时间
大家好,又见面了,我是你们的朋友全栈君。
文章目录
(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.cn/137267.html原文链接:https://javaforall.cn
相关文章
- python语法(二)——截取字符串的方法详解
- python jieba库_Python jieba库的使用说明「建议收藏」
- 【python】错误SyntaxError: invalid syntax的解决方法总结
- python socket recvfrom_Python:socket.recvfrom()不返回任何地址
- 遗传算法的应用实例python实现_遗传算法Python解决一个问题
- python类方法
- python hashlib_python之hashlib模块
- Python用KShape对时间序列进行聚类和肘方法确定最优聚类数k可视化|附代码数据
- Python find()方法:检测字符串中是否包含某子串
- Python常用魔术方法一览表
- Linux查看Python版本的有效方法(linux查看python版本)
- Python实现快速连接Redis数据库(python连接redis)
- Python实现Oracle数据库连接(python连接oracle数据库)
- Python实现MySQL数据库的读取(python读取mysql)
- Python去掉字符串中空格的方法
- Python中MYSQLdb出现乱码的解决方法
- Python检查数组元素是否存在类似PHPisset()方法
- python使用any判断一个对象是否为空的方法
- python判断字符串是否纯数字的方法
- Python中多线程thread与threading的实现方法
- Python中实现两个字典(dict)合并的方法
- python实现udp数据报传输的方法