2016-12-22 8 views
0

shape = (365, 28, 36) 인 3d 배열이 있습니다. 나는 365 조각의 2 차원 배열 (28,36)을 서로 쌓은 3d 배열로이 배열을 생각한다. 이제이 3d 배열을 반복하고 각각의 2D 슬라이스를 8 번 반복 한 다음 서로 겹치기를 원합니다. 이것은 하나의 크기 배열 (2920, 28, 36)으로 끝날 것임을 의미합니다. 2920은 365 * 8에서 제공됩니다.3D 배열을 반복하고 두 번째 슬라이스를 N 번 추가하십시오.

내 시도는 지금까지했지만 작동하지 않습니다. 누구든지이 문제를 도울 수 있습니까? 파이썬에서

l = [] 
for i in range(365): 
    for j in range(28): 
     for k in range(30): 
      l.extend(repeat(a[i,j,k], 8)) 
+1

3D 배열에 대한 데이터 샘플을 공유해 주실 수 있습니까? –

+0

예. I cal a 파일은 여기에서 찾을 수 있습니다. https://1drv.ms/f/s!AlJG9g1WlnmlhDC1WfgR1ljtI67E –

+0

"작동하지 않습니다"는 문제 사양이 아닙니다. StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. – Prune

답변

1
newarray = [] 
for arr2d in oldarray: 
    for _ in range(8): 
     newarray.append(arr2d) 

배열이 실제로는 가변 길이이다 의미하는 목록입니다, 그래서 당신은이 작업을 수행 할 수 있습니다. oldarray은 오래된 3d 배열이고 newarray은 원하는 출력이고 안에있는 2 차원 배열입니다.

+0

고맙습니다. 그게 내 문제를 해결했다. –

0

코드에 몇 가지 구문 오류가 있습니다. 또한 2D 슬라이스에 대한 포인터가 8 개가 아닌 8 개의 독립적 인 2D 데이터 복사본을 원한다고 생각합니다. 한 값을 변경하면 모두 변경됩니다.

이 시도 : 최종 인쇄물

from copy import deepcopy 

a = [ 
    [[1, 2, 3], ['a', 'b', 'c']], 
    [[4, 5, 6], ['@', '#', '$']], 
    [[7, 8, 9], ['X', 'Y', 'Z']] 
    ] 

l = [] 
for slice in a: 
    l.extend([deepcopy(slice) for _ in range(8)]) 

l[0][0][0] = "FLAG" 
print l 

, 문자열 "FLAG"을 어떻게 하나의 위치 변화보다는 변화하는 그 조각의 모든 8 개 사본을 확인합니다.