前言看Python代碼時,碰見 numpy.transpose 用于高維數(shù)組時挺讓人費解,,通過一番畫圖分析和代碼驗證,,發(fā)現(xiàn) transpose 用法還是很簡單的。 正文Numpy 文檔 numpy.transpose 中做了些解釋,,transpose 作用是改變序列,,下面是一些文檔Examples:
代碼1: x = np.arange(4).reshape((2,2))
輸出1: #x 為:
array([[0, 1],
[2, 3]])
代碼2: import numpy as np
x.transpose()
輸出2: array([[0, 2],
[1, 3]])
對于二維 ndarray,transpose在不指定參數(shù)是默認是矩陣轉(zhuǎn)置,。如果指定參數(shù),,有如下相應(yīng)結(jié)果: 代碼3: x.transpose((0,1))
輸出3: # x 沒有變化
array([[0, 1],
[2, 3]])
代碼4: x.transpose((1,0))
輸出4: # x 轉(zhuǎn)置了
array([[0, 2],
[1, 3]])
這個很好理解: 對于x,,因為: 代碼5: x[0][0] == 0
x[0][1] == 1
x[1][0] == 2
x[1][1] == 3
我們不妨設(shè)第一個方括號“[]”為 0軸 ,第二個方括號為 1軸 ,,則x可在 0-1坐標系 下表示如下:
代碼6: 因為 x.transpose((0,1)) 表示按照原坐標軸改變序列,,也就是保持不變
而 x.transpose((1,0)) 表示交換 ‘0軸’ 和 ‘1軸’,所以就得到如下圖所示結(jié)果:
注意,,任何時候你都要保持清醒,,告訴自己第一個方括號“[]”為 0軸 ,第二個方括號為 1軸 此時,,transpose轉(zhuǎn)換關(guān)系就清晰了,。
我們來看一個三維的: 代碼7: import numpy as np
# A是array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
A = np.arange(16)
# 將A變換為三維矩陣
A = A.reshape(2,2,4)
print(A)
輸出7: A = array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
我們對上述的A表示成如下三維坐標的形式: 所以對于如下的變換都很好理解啦: 代碼8: A.transpose((0,1,2)) #保持A不變
A.transpose((1,0,2)) #將 0軸 和 1軸 交換
將 0軸 和 1軸 交換: 此時,輸出
代碼9: A.transpose((1,0,2)) [0][1][2] #根據(jù)上圖這個結(jié)果應(yīng)該是10
后面不同的參數(shù)以此類推,。 完,。
|