numpy中transpose的功能

2022-03-30 06:04:37 字數 1345 閱讀 4743

看了網上一堆解釋,有用相互交換來解釋的,我看了半天也看不出所以然來。心想著自己試驗一下。

numpy.transpose的用法很簡單:假如你有乙個四維的陣列,那麼四個維度就是0,1,2,3。風格會像下面這樣:

>>>a = np.ones((1, 32, 30, 3))

>>>a.shape

(1, 30, 32, 3)

>>>a.transpose(0,3,1,2)

如你所見,transpose是ndarray的類方法,輸入是四個維度的排列,那麼這四個維度的排列一定蘊含著交換維度的「規則」。有兩個可能(合理)的想法:

1. 以上面這個例子來說,0, 3, 1, 2分別是第 1, 2, 3, 4 個位置引數。那麼transpose的作用就是將原本的第 1, 2, 3, 4維替換到所給的位置,即:原來的第0維調換到0號位置即第0維,原來的第1維調換到3號位置即第3維,所以結果應該是 shape_after = (1, 32, 3, 30)。但是事實並不是如此,why?這不,還有第二種可能的解釋

2. 原來不是有四個維度嗎,分別有標記,即0, 1, 2, 3維,那麼我們對維度進行調換的過程不就是對這個標籤排序的過程嗎?那麼(0,3,1,2)的意思就是以這樣的順序:第0維,第3維,第1維,第2維的順序來組成乙個新的陣列,所以結果應該是 shape_after = (1, 3, 30, 32)。執行之後正好是這樣~~

>>>a = np.ones((1, 32, 30, 3))

>>>a.shape

(1, 30, 32, 3)

>>>a.transpose(0,3,1,2).shape

(1, 3, 30, 32)

再舉個栗子:

>>>a = np.array([[[1,2],[3,4]],[[4,5],[6,7]]])

>>>a

array([[[1, 2],

[3, 4]],

[[4, 5],

[6, 7]]])

>>>a.transpose(0,2,1)

array([[[1, 3],

[2, 4]],

[[4, 6],

[5, 7]]])

按上面的理論來解釋,第一維不動,後兩維交換。結果發現兩個2×2的矩陣都被轉置,而它們好好的並在一起。這不就是我們期待的效果嗎?

總結一下:乙個陣列原先是有第0,1,2...維的。transpose做的事情就是讓這些維度「排個序」,從而達到交換維度的目的。你可能會覺得它與reshape很像,但是其實區別蠻大。reshape是改變了numpy陣列元素的「解釋」方式,而transpose則顯式修改了資料的相對位置,這也是為什麼它的英文和「矩陣」轉置是一樣的原因。

Numpy中的transpose函式

transpose 的操作物件是矩陣。我們用乙個例子來說明這個函式 0 1 2 3 4 5 6 7 這是乙個shape為 2,2,2 的矩陣,現在對它進行transpose操作。首先我們對矩陣的維度進行編號,上述矩陣有三個維度,則編號分別為0,1,2,而transpose函式的引數輸入就是基於這個編...

解疑 Numpy 中的 transpose

官方文件描述 numpy.ndarray.transpose ndarray.transpose axes returns a view of the array with axes transposed.for a 1 d array,this has no effect.to change be...

numpy中的transpose函式使用方法

二維矩陣的transpose函式 不曉得該怎麼起頭,直接上乾貨。transpose 簡單來說,就相當於數學中的轉置,在矩陣中,轉置就是把行與列相互調換位置 例如 隨機生成乙個三行五列的二維矩陣 arr np.arange 15 reshape 3,5 arr array 0,1,2,3,4 5,6,...