2017-09-03 73 views
1

假設我有一個numpy陣列A具有形狀(5,24,1)
我想利用五個單獨的轉置沿axis = 0,使得轉置後所得到的形狀是(5,1,24)
我怎樣才能做到這一點使用一些numpy功能?移調3-d numpy的陣列

回答

3

三種方法可以建議 -

A.swapaxes(1,2) 
A.transpose(0,2,1) 
np.rollaxis(A,2,1) 

對於swapaxestranspose,請按照他們的文檔。

隨着np.rollaxis,我們正在滾動的軸,以使第三軸到第二位置,從而推回第二軸線成第三軸的位置。鏈接的文檔中有更多信息。

使用的事實,最後軸是單 -

A[:,None,:,0] 
+0

Works正確。謝謝,你能解釋一下嗎! NTW我用'A.transpose(0,2,1)' –

+0

@Divakar你忘了'moveaxis' :-P – MSeifert

+0

@MSeifert不是真的moveaxis'的'粉絲,過多的字符;)但是,是的這是另一種選擇,並應完成這套解決方案。 – Divakar

2

你可以使用np.moveaxis(一個選項從Divakars出色答卷丟失),您可以定義哪些軸應移動:

np.moveaxis(A, (0, 1, 2), (0, 2, 1)) 

這將軸0移動到0(無變化,也可以省略),1221。因此,這基本上只是交換軸1和2.

>>> A = np.ones((5,24,1)) 
>>> res = np.moveaxis(A, (1, 2), (2, 1)) # this time without the zeros 
>>> res.shape 
(5, 1, 24) 
+0

剛剛來到向我,'reshape'將完成它;)不過,我想它的接近我末建議,而不指定形狀PARAMS。 – Divakar

+0

@Divakar正確,但屬於類別「在這裏工作,因爲一維的大小爲1但不會真正轉置」,就像你的'A [:,None,:,0]'一樣。我傾向於迴避這些特殊情況下的解決方案,因爲這可能會導致後續問題。 :d – MSeifert