Python實現(xiàn)矩陣轉置的幾種方法詳解
Python實現(xiàn)矩陣轉置
轉置矩陣意味著我們將其列變?yōu)樾小W屛覀兺ㄟ^一個例子來理解它,如果轉置后看起來像什么。
假設您有原始矩陣,例如-x = [[1,2][3,4][5,6]]
在上面的矩陣“ x”中,我們有兩列,分別為1、3、5和2、4、6。
因此,當我們在矩陣“ x”上方轉置時,列變?yōu)樾小R虼?,上面矩陣的轉置版本看起來像-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()函數(shù)
- zip() 函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的對象,這樣做的好處是節(jié)約了不少的內存。
- 可以使用 list() 轉換來輸出列表?!緕ip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中為了減少內存,zip() 返回的是一個對象。如需展示列表,需手動 list() 轉換?!?/li>
- 如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同,利用
*
號操作符,可以將元組解壓為列表。
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) # 元素個數(shù)與最短的列表一致 [(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)) #矩陣行數(shù) #print(len(A[0])) #矩陣列數(shù) 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)) #矩陣行數(shù) #print(len(A[0])) #矩陣列數(shù) for i in range(len(A[0])):#len(A[0])矩陣列數(shù) for j in range(i,len(A)):#len(A)矩陣行數(shù) #轉置就是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,使用雙重循環(huán)添加元素
A = [[1,2,3],[4,5,6],[7,8,9]] B=[] for i in range(len(A[0])):#len(A[0])矩陣列數(shù) temp = [] for j in range(len(A)):#len(A)矩陣行數(shù) temp.append(A[j][i]) B.append(temp) print(B)
# 輸出
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
到此這篇關于Python實現(xiàn)矩陣轉置的幾種方法詳解的文章就介紹到這了,更多相關Python實現(xiàn)矩陣轉置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
點云地面點濾波(Cloth Simulation Filter, CSF)
這篇文章主要介紹了點云地面點濾波(Cloth Simulation Filter, CSF)“布料”濾波算法介紹,本文從基本思想到實現(xiàn)思路一步步給大家講解的非常詳細,需要的朋友可以參考下2021-08-08Python利用glob庫實現(xiàn)輕松應對文件和目錄管理
Python提供了glob庫,它允許我們根據(jù)特定模式匹配文件和目錄,本文將詳細介紹glob庫的用法,并通過實例演示它的各種功能,需要的可以了解一下2023-07-07利用python、tensorflow、opencv、pyqt5實現(xiàn)人臉實時簽到系統(tǒng)
這篇文章主要介紹了利用python、tensorflow、opencv、pyqt5實現(xiàn)人臉實時簽到系統(tǒng),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09