2017-01-29 28 views
0

假設我有一個數組如何使用numpy來翻轉這個數組?

a = array([[[ 29, 29, 27], 
      [ 36, 38, 40], 
      [ 86, 88, 89]], 
      [[200, 200, 198], 
      [199, 199, 197] 
      [194, 194, 194]]]) 

,我想從左至右在列表中,列出所以它會成爲像

b = array([[[ 29, 29, 89],  # 27 became 89 
      [ 36, 38, 40], 
      [ 86, 88, 27]], # 89 became 27 
      [[200, 200, 194],  # 198 became 194 
      [199, 199, 197], 
      [194, 194, 198]]]) # 194 became 198 

我擡頭的NumPy的翻轉3元手冊,但仍然無法弄清楚解決方案,.flip和.fliplr在這種情況下看起來合適,但如何使用它們?

+0

原始值這應該是一個三維數組?你的語法錯了。 – user2357112

+0

是的。我的不好,我編輯它。 – user3697665

回答

2

索引陣列以選擇子陣列,使用:

> a[:,:,-1] 
array([[198, 197, 194], 
     [ 27, 40, 89]]) 

這將選擇沿a的第三維度中的最後一個元素。子陣列的形狀爲(2,3)。然後使用反向選擇:

a[:,:,-1][:,::-1] 

第二切片,[:,::-1],需要一切沿着第一維度原樣([:]),以及所有沿着第二維的元素的,但反轉([::-1])。切片語法基本上是說在第一個元素處開始,去掉最後一個元素([:]),但是按照相反的順序([::-1])。你可以僞代碼把它寫成[start here : end here : use this step size]-1告訴它後退。

然後將其分配給原始數組的第一片。此更新/覆蓋的a

a[:,:,-1] = a[:,:,-1][:,::-1] 

> a 
array([[[ 29, 29, 89], 
     [ 36, 38, 40], 
     [ 86, 88, 27]], 

     [[200, 200, 194], 
     [199, 199, 197], 
     [194, 194, 198]]]) 
+0

非常感謝!你能否解釋一下[:, - 1]部分在[:,: - 1] [:,:: - 1]?我試圖弄清楚這個代碼怎麼會顛倒這個順序.. – user3697665

+0

當然,我會更新更多的信息。 – James

+1

RHS可以寫成'a [:, :: - 1,-1]',選擇最後一列,並同時反轉行。 – hpaulj