在上一篇的數組轉置和換軸之中,換軸的時候書本上用到了 transpose 這個方法,然后數組就莫名其妙的發生了變化,而且根本讓人看不懂。於是我就去百度了很久關於 transpose 函數的用法。 總結了以下心得。
一開始我以為 transpose方法只是單純的把三維數組的每個基層元素的x和y對調了以下,后來發現錯的離譜。
注:下面四個圖均有一點小錯誤,已經做出了詳細的解釋,謹慎看。
在NumPy文檔中,對numpy.transpose 走了一些解釋,他的作用是改變序列,下面是一些文檔的栗子:
x = np.arange(4).reshape((2,2))
#輸出
array([[0, 1],
[2, 3]])
import numpy as np
x.transpose()
#輸出
array([[0, 2],
[1, 3]])
對於二維的 ndarray來說,transpose在不指定參數時默認是矩陣轉置。如果制定了參數,就會有如下的相應結果:
x.transpose((0,1))
#結果
# x 沒有變化
array([[0, 1],
[2, 3]])
x.transpose((1,0))
#結果
# x 轉置了
array([[0, 2],
[1, 3]])
為了方便理解
先寫出這樣子的表達式
x[0][0] == 0
x[0][1] == 1
x[1][0] == 2
x[1][1] == 3
可以看到和 x數組的每個位置的對應關系了。
設第一個方括號 "[ ]"為0軸 第二個方括號為 1軸 ,就可以建立0-1的坐標系了。
由於是網上找的圖,這張圖畫錯了,2 和 1 的位置應該換一下。
能清晰的看清每個基層元素的位置。
因為 x.transpose((0,1)) 表示按照原坐標軸改變序列,也就是保持不變,所以最后的結果不變
而 x.transpose((1,0)) 表示交換 ‘0軸’ 和 ‘1軸’,所以就得到如下圖所示結果:
該圖也是,2 和 1 應該換一下
無論什么時候,都記住第一個方括號是0軸 第二個方括號是1軸,這樣就不會亂,transpose的關系就很清晰了。
難點來了。 三維數組的轉置。
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)
#結果
A = array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
我們對上述的A表示成如下三維坐標的形式:
該圖的 0,1,2,3 寫反了, 應是3,2,1,0 (自上向下)
然后下面的轉變就會很好理解了。
A.transpose((0,1,2)) #保持A不變
A.transpose((1,0,2)) #將 0軸 和 1軸 交換
該圖的 0,1,2,3 寫反了, 應是3,2,1,0 (自上向下)
把 0軸 和 1軸 交換
這時候這個 transpose 就已經被容易理解了。
參考原文鏈接:https://blog.csdn.net/u012762410/article/details/78912667