2017-11-20 6 views
0

매우 큰 배열에서이 코드를 사용하고 싶습니다. 이 코드는 실행하는 데 오랜 시간이 걸리며 효율적이지 않습니다. 루프를 제거하고이 코드를 최적의 방법으로 변환 할 수있는 방법이 있습니까?numpy 최적화 방법 (루프 제거)

>>> import numpy as np 
>>> x=np.random.randint(10, size=(4,5,3)) 
>>> x 
array([[[3, 2, 6], 
     [4, 6, 6], 
     [3, 7, 9], 
     [6, 4, 2], 
     [9, 0, 1]], 

     [[9, 0, 4], 
     [1, 8, 9], 
     [6, 8, 1], 
     [9, 4, 5], 
     [1, 5, 2]], 

     [[6, 1, 6], 
     [1, 8, 8], 
     [3, 8, 3], 
     [7, 1, 0], 
     [7, 7, 0]], 

     [[5, 6, 6], 
     [8, 3, 1], 
     [0, 5, 4], 
     [6, 1, 2], 
     [5, 6, 1]]]) 
>>> y=[] 
>>> for i in range(x.shape[1]): 
    for j in range(x.shape[2]): 
     y.append(x[:, i, j].tolist()) 


>>> y 
[[3, 9, 6, 5], [2, 0, 1, 6], [6, 4, 6, 6], [4, 1, 1, 8], [6, 8, 8, 3], [6, 9, 8, 1], [3, 6, 3, 0], [7, 8, 8, 5], [9, 1, 3, 4], [6, 9, 7, 6], [4, 4, 1, 1], [2, 5, 0, 2], [9, 1, 7, 5], [0, 5, 7, 6], [1, 2, 0, 1]] 

답변

2

당신은 np.transpose와 축을 바꾸어 넣습니다 다음 2D로 바꿀 수있다 -리스트 출력 .tolist()

y = x.transpose(1,2,0).reshape(-1,x.shape[0]) 

추가]를.

+0

어떤 복용량 변경 (-1 .. do? –

+0

@pdshah https://stackoverflow.com/questions/41776579/what-does-1-in-numpy-reshape-mean – Divakar

2

예, np.ndarray.flatten(x, order='F') (예 : F는 포트란 스타일, 첫 번째 열은 본 예에 해당)으로 시도하십시오.

documentation을 읽고 어떤 매개 변수가 가장 잘 맞는지 확인하십시오. IMHO, 나는 여기 당신을 위해 ndarray.flatten이 더 좋고 우아한 옵션이라고 생각한다. 그러나 원하는 솔루션에 따라 배열을 먼저 변형해야 할 수 있습니다.