python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python实现矩阵转置

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

作者:夏普通

这篇文章主要介绍了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(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实现矩阵转置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文