今天在網(wǎng)上搜尋了許多博客,始終沒(méi)有真正理解numpy中的transpose()函數(shù),
transpose 的原理其實(shí)是根據(jù)維度(shape)索引決定的,舉個(gè)栗子:
- x = np.arange(4).reshape((2,2)) //生成一個(gè)2x2的數(shù)組
- print(x)
- [[0 1]
- [2 3]]
我們生成了一個(gè)維度為二維數(shù)組,其中有兩個(gè)索引值(矩陣的行與列)。
transpose()函數(shù)的作用就是調(diào)換數(shù)組的行列值的索引值,類似于求矩陣的轉(zhuǎn)置:
- x = np.arange(4).reshape((2,2))
- x = np.transpose(x)
- print(x)
- [[0 2]
- [1 3]]
我們可以直觀的看到,數(shù)組的行列索引值對(duì)換,1的位置從x(0,1)跑到了x(1,0)。
那么三維數(shù)組呢?
我們繼續(xù)生成一個(gè)三維的數(shù)組:
- x = np.arange(12).reshape((2,2,3)) //生成一個(gè)2x2x3的數(shù)組
- print(x)
- [[[ 0 1 2]
- [ 3 4 5]]
- [[ 6 7 8]
- [ 9 10 11]]]
我們從高中數(shù)學(xué)知道三維由x軸、y軸以及z軸組成。
假設(shè)三維數(shù)組當(dāng)中的索引值為x,y,z
transpose()函數(shù)的作用就是調(diào)換x,y,z的位置,也就是數(shù)組的索引值。
所以我們正常的數(shù)組索引值為(0,1,2),等于(x,y,z)
我們來(lái)看實(shí)例代碼:
- x = np.arange(12).reshape((2,2,3))
- print(x)
- [[[ 0 1 2]
- [ 3 4 5]]
- [[ 6 7 8]
- [ 9 10 11]]]
- x = np.transpose(x,(1,0,2)) //transpose()函數(shù)的第二個(gè)參數(shù)就是改變索引值的地方
- print(x)
- [[[ 0 1 2]
- [ 6 7 8]]
- [[ 3 4 5]
- [ 9 10 11]]]
通過(guò)transpose()函數(shù)改變了x的索引值為(1,0,2),對(duì)應(yīng)(y,x,z)
索引改變后原本y的值和x的值對(duì)換了。
有上面代碼的數(shù)字7為例,原本的7的位置索引為(1,0,1),通過(guò)transpose(x,(1,0,2))索引改變?yōu)椋?,1,1)
無(wú)論四維、五維……都可以用這個(gè)原理分析。
懂了吧?原理其實(shí)很簡(jiǎn)單對(duì)不對(duì)!
聯(lián)系客服