NumPy的transpose方法詳解


在上一篇的數組轉置和換軸之中,換軸的時候書本上用到了 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


免責聲明!

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



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