詳解numpy中transpose()函數


今天在網上搜尋了許多博客,始終沒有真正理解numpy中的transpose()函數,

transpose 的原理其實是根據維度(shape)索引決定的,舉個栗子:

x = np.arange(4).reshape((2,2)) //生成一個2x2的數組
print(x)
[[0 1]
[2 3]]
我們生成了一個維度為二維的數組,其中有兩個索引值(矩陣的行與列)。

transpose()函數的作用就是調換數組的行列值的索引值,類似於求矩陣的轉置:

x = np.arange(4).reshape((2,2))
x = np.transpose(x)
print(x)
[[0 2]
 [1 3]]
我們可以直觀的看到,數組的行列索引值對換,1的位置從x(0,1)跑到了x(1,0)。

那么三維數組呢?

我們繼續生成一個三維的數組:

x = np.arange(12).reshape((2,2,3)) //生成一個2x2x3的數組
print(x)
[[[ 0  1  2]
  [ 3  4  5]]
[[ 6  7  8]
  [ 9 10 11]]]
我們從高中數學知道三維由x軸、y軸以及z軸組成。

假設三維數組當中的索引值為x,y,z

transpose()函數的作用就是調換x,y,z的位置,也就是數組的索引值。

所以我們正常的數組索引值為(0,1,2),等於(x,y,z)

我們來看實例代碼:

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()函數的第二個參數就是改變索引值的地方
print(x)
[[[ 0 1 2]
[ 6 7 8]]
[[ 3 4 5]
[ 9 10 11]]]
通過transpose()函數改變了x的索引值為(1,0,2),對應(y,x,z)

索引改變后原本y的值和x的值對換了。

有上面代碼的數字7為例,原本的7的位置索引為(1,0,1),通過transpose(x,(1,0,2))索引改變為(0,1,1)

 

無論四維、五維……都可以用這個原理分析。

懂了吧?原理其實很簡單對不對!

對矩陣內的每一個元素都執行這樣的運算就可以了

 

同理swapaxes()也是這樣的操作,需要傳入兩個軸的編號.swapaxes也是返回源數據的視圖(不會進行任何復制操作)

————————————————
版權聲明:本文為CSDN博主「DeepGym」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_37377691/article/details/80086480


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM