2013-11-26 70 views
4

假設我有一個數組如何有效地翻轉多維numpy數組?

>>> a 
[[[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]] 

,我想翻轉繞軸與

>>> aflipped 
[[[2, 1, 0], [5, 4, 3], [8, 7, 6]], [[12, 11, 10], [15, 14, 13], [18, 17, 16]]] 

結束了,我想以某種的

>>> aflipped=a[::-1][::1][::1] 
做到這一點

>>>> aflipped=flipud(a) 

表示法,因爲我知道這是非常快速和(重要)內存使用率低。我的代碼已經結束了交換,for循環根本不是理想選擇。

其實這是一個4D陣列,我只想翻轉一個軸,但看起來我的選項僅限於前兩個軸。有沒有一種高效的內存方法?

回答

12

事情是這樣的:

>>> a = np.array([[[0, 1, 2], [3, 4, 5], [6, 7, 8]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]) 
>>> a[:,:,::-1]  #or a[..., ::-1] 
array([[[ 2, 1, 0], 
     [ 5, 4, 3], 
     [ 8, 7, 6]], 

     [[12, 11, 10], 
     [15, 14, 13], 
     [18, 17, 16]]]) 

時機比較:

>>> %timeit a[:,:,::-1] 
1000000 loops, best of 3: 1.53 µs per loop 
>>> %timeit a[..., ::-1] 
1000000 loops, best of 3: 1.06 µs per loop 
相關問題