用python實現矩陣轉置

2021-09-25 10:15:11 字數 1455 閱讀 1333

前幾天群裡有同學提出了乙個問題:手頭現在有個列表,列表裡面兩個元素,比如[1, 2],之後不斷的新增新的列表,往原來相應位置新增。例如新增[3, 4]使原列表擴充為[[1, 3], [2, 4]],再新增[5, 6]擴充為[[1, 3, 5], [2, 4, 6]]等等。

其實不動腦筋的話,用個二重迴圈很容易寫出來:

def

trans(m):

a = [ for i in

m[0]]

for i in

m:

for j in

range(len(i)):

return

am = [[1, 2], [3, 4], [5, 6]] #

想象第乙個列表是原始的,後面的是往裡新增的

print trans(m) #

result:[[1, 3, 5], [ 2, 4, 6]]

然而不管怎麼看這種**都很醜。

仔細看了一下m這種結構。等等,這不是字典的iteritems()的結果麼?如果dict(m),那麼結果——不就是keys()和values()麼?

於是利用字典轉換一下:

def

trans(m):

d =dict(m)

return [d.keys(), d.values()]

可是再仔細想想,這裡面有bug。如果新增列表的第乙個元素相同,也就是轉化之後dict的key相同,那肯定就不行了呀!況且,如果原始列表不是兩個,而是多個,肯定不能用字典的呀!於是這種方法作罷,還是好好看看列表的形狀。

然後又是乙個不小心的發現:

這種轉置矩陣的即時感是怎麼回事?

沒錯,這個問題的本質就是求解轉置矩陣。於是就簡單了,還是用個不動腦筋的辦法:

def

trans(m):

for i in

range(len(m)):

for j in

range(i):

m[i][j], m[j][i] =m[j][i], m[i][j]

return

mm = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print trans(m)

其實還是有點bug的,看起來是好用的,然而這個矩陣要求行列長度相同才行。

最後,群裡某大神說:如果只是轉置矩陣的話,直接zip就好了。這才想起來zip的本質就是這樣的,取出列表中的對應位置的元素,組成新列表,正是這個題目要做的。

所以最終,這個題目**置矩陣)的python解法就相當奇妙了:

def

trans(m):

return zip(*d)

沒錯,就這麼簡單。python的魅力。

python實現轉置矩陣 用Python轉置矩陣?

轉置矩陣意味著我們將其列變為行。讓我們通過乙個例子來理解它,如果轉置後看起來像什麼。假設您有原始矩陣,例如 x 1,2 3,4 5,6 在上面的矩陣 x 中,我們有兩列,分別為1 3 5和2 4 6。因此,當我們在矩陣 x 上方轉置時,列變為行。因此,上面矩陣的轉置版本看起來像 x1 1,3,5 2...

Python 矩陣轉置

在讀時,會用到這麼的一段 image vector len np.prod image size 總元素大小,3 55 47 img image.open path arr img np.asarray img,dtype float64 arr img arr img.transpose 2,0,...

C語言 用指標實現矩陣轉置

題目如下 編寫乙個函式 void transpose int matrix 10 int n 實現對乙個矩陣的前n行和前n列轉置。先在主函式中初始化如下矩陣,然後輸入n n 10 呼叫transpose函式前n行n列的轉置。1 3 5 7 9 6 5 4 3 2 2 4 6 8 0 7 6 5 4 ...