2016-12-05 10 views
0

Iは、4D配列を有する:array = np.random.rand(3432,1,30,512)は、4D構造に2次元配列を挿入numpyの

私はまた私がその軸1に沿って、4D構造にこれらを挿入する(30,512)

形状の2次元配列の5セットを持っているが私の最終的な形は(3432,6,30,512)(5つの新しい配列+元の1)です。この3432個の要素ごとにこのセットを繰り返し挿入する必要があります

これを行う最も効果的な方法は何ですか?

私は、2Dから4Dへの再成形を試みてから、軸1に沿って挿入しました。私は、軸1が6のサイズを決して超えないことを期待していますが、2D配列は、 3432要素。

all_data = np.reshape(all_data, (-1, 1, 30, 512)) 

for i in range(all_data.shape[0]): 
    num_band = 1 
    for band in range(5):    
     temp_trial = np.zeros((30, 512)) # Just an example. values arent actually 0 
     temp_trial = np.reshape(temp_trial, (1,1,30,512)) 
     all_data = np.insert(all_data, num_band, temp_trial, 1) 

     num_band += 1 
+0

'insert'は反復作業のためのものではありません。最初にドキュメントの例を理解していることを確認してください。 – hpaulj

答えて

1

は最初の最終的な形状を持つ配列を作成し、後で要素を挿入します:

final = np.zeros((3432,6,30,512)) 

for i in range(3432): # note, this will take a while 
    for j in range(6): 
     final[i, j, :, :] = # insert your array here (np.ones((30, 512))) 

をしたり、実際にしたい場合、私は私の問題は完全にinsertメソッドのobjのparamを理解していないことにあると思いますゼロ番目の軸の上にこれをブロードキャストするために、3432のそれぞれを仮定すると、各「バンド」で同じでなければならない:

for i in range(6): 
    final[:, i, :, :] = # insert your array here (np.ones((30, 512))) 

限りあなたは多くのループをしません。ベクター化する必要はありません。

+1

'insert'はこのような割り当てとコピーをしなければならないので、開始時にフルサイズの' final'を設定することは意味があります。 – hpaulj

関連する問題