2016-12-05 3 views
0

I는 4D 배열이 : array = np.random.rand(3432,1,30,512)는 4D 구조로 2D 배열을 삽입 NumPy와

는 I는 I가되도록 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을 이해하지에있다 생각 만큼

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

각각 "밴드"에 대해 동일해야 3432 각 가정, 제로 번째 축 위에 이것을 브로드 캐스트 당신은 많은 루프를하지 않고 벡터화 할 필요가 없다.

+1

'insert'는 이런 종류의 할당과 복사를해야만합니다. 그래서 처음부터 풀 사이즈'final'을 설정하는 것은 많은 의미가 있습니다. – hpaulj

관련 문제