2017-11-22 10 views
1

私は4つの配列を持っており、それらを1つの配列に連結してインターリーブしたいと思っています。これはどうすればいいですか?Numpy配列をインターリーブで連結する

>>> import numpy as np 
>>> a = np.tile(0,(5,2)) 
>>> b = np.tile(1,(5,2)) 
>>> c = np.tile(2,(5,2)) 
>>> d = np.tile(3,(5,2)) 
>>> e = np.concatenate((a,b,c,d),axis=1) 
>>> e 
    array([[0, 0, 1, 1, 2, 2, 3, 3], 
      [0, 0, 1, 1, 2, 2, 3, 3], 
      [0, 0, 1, 1, 2, 2, 3, 3], 
      [0, 0, 1, 1, 2, 2, 3, 3], 
      [0, 0, 1, 1, 2, 2, 3, 3]]) 

これはちょうど連結を与える。

しかし、私のdesired_outputは次のとおりです。

>>> desired_output 
    array([[0, 1, 2, 3, 0, 1, 2, 3], 
      [0, 1, 2, 3, 0, 1, 2, 3], 
      [0, 1, 2, 3, 0, 1, 2, 3], 
      [0, 1, 2, 3, 0, 1, 2, 3], 
      [0, 1, 2, 3, 0, 1, 2, 3]]) 

私は私が使用してeからインターリーブされた列を選択することができます知っている意味:

>>> f = e[:, ::2] 
>>> array([[0, 1, 2, 3], 
      [0, 1, 2, 3], 
      [0, 1, 2, 3], 
      [0, 1, 2, 3], 
      [0, 1, 2, 3]]) 

をしかし、どのように、私は一つの大きな配列を作るのですか?

答えて

2

使用np.dstackまたはnp.stackは私たちに3D配列を与える最後の軸に沿って積み重ね、その後2Dに戻って再構築する -

np.dstack([a,b,c,d]).reshape(a.shape[0],-1) 
np.stack([a,b,c,d],axis=2).reshape(a.shape[0],-1) 
+0

スウィート!ありがとう!それは本当に速かった。あなたは生き物や何のためにこれをしますか? === – bFig8

+0

@ bFig8 Mostly;) – Divakar

+0

男性この「変形」機能と軸索引けを実際に把握しなければなりません。 – bFig8

関連する問題