Python實現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解
Python實現(xiàn)矩陣轉(zhuǎn)置
轉(zhuǎn)置矩陣意味著我們將其列變?yōu)樾?。讓我們通過一個例子來理解它,如果轉(zhuǎn)置后看起來像什么。
假設(shè)您有原始矩陣,例如-x = [[1,2][3,4][5,6]]
在上面的矩陣“ x”中,我們有兩列,分別為1、3、5和2、4、6。
因此,當(dāng)我們在矩陣“ x”上方轉(zhuǎn)置時,列變?yōu)樾?。因此,上面矩陣的轉(zhuǎn)置版本看起來像-x1 = [[1, 3, 5][2, 4, 6]]
因此,我們有另一個矩陣“ x1”,在不同的位置以不同的值組織不同。
方法一、使用numpy轉(zhuǎn)置
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ù),將對象中對應(yīng)的元素打包成一個個元組,然后返回由這些元組組成的對象,這樣做的好處是節(jié)約了不少的內(nèi)存。
- 可以使用 list() 轉(zhuǎn)換來輸出列表?!緕ip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中為了減少內(nèi)存,zip() 返回的是一個對象。如需展示列表,需手動 list() 轉(zhuǎn)換?!?/li>
- 如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同,利用
*號操作符,可以將元組解壓為列表。
zip(A) 相當(dāng)于打包,打包為元組的列表:
>>> 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() 轉(zhuǎn)換。 #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ù)
#轉(zhuǎn)置就是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]]
因為轉(zhuǎn)置矩陣的對稱性, for j in range(i,len(A)) 限制了只遍歷矩陣上三角,必須要限制,如果不限制會導(dǎo)致重復(fù)交換。
方法四、新建列表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]]
到此這篇關(guān)于Python實現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解的文章就介紹到這了,更多相關(guān)Python實現(xiàn)矩陣轉(zhuǎn)置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)對doc,txt,xls文檔的讀寫操作
這篇文章主要介紹了python實現(xiàn)對doc,txt,xls文檔的讀寫操作,正如標(biāo)題所見,文章包括三個部分python實現(xiàn)對doc文檔的讀取、python實現(xiàn)對txt文檔的讀取和python實現(xiàn)對xls表格的讀取,需要的朋友可以參考一下2022-04-04
Python中的條件判斷語句基礎(chǔ)學(xué)習(xí)教程
這篇文章主要介紹了Python中的條件判斷語句基礎(chǔ)學(xué)習(xí)教程,文中使用的是Python2.x版本但條件語句部分的使用規(guī)則未在3.x中改變,需要的朋友可以參考下2016-02-02

