2017-01-29 7 views
0

私は配列numpyを使ってこの配列を反転させるにはどうすればいいですか?

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

を持っていると私はnumpyのを見上げ、それが

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 

のようになりますので、リスト・オブ・リストの左から右へ3番目の要素を反転するとします手動ですが、まだ解決策を見つけることができません.flipと.fliplrはこの場合に適していますが、それらを使用する方法は?

+0

これは3D配列になっていますか?構文が間違っています。 – user2357112

+0

はい、そうです。私の悪い、私はそれを編集しました。 – user3697665

答えて

2

ランキング配列を使用して、サブ配列を選択する:

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

をこれがaの第3の次元に沿った最後の要素を選択します。サブアレイの形状は(2,3)です。次に用いた選択を反転:

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

第二スライス、[:,::-1]は、([:]) - であるように、第1の次元に沿ってすべてをとり、第2の次元に沿ってのすべての要素が、([::-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

関連する問題