2017-02-17 2 views
2

이 코드의 두 번째 줄에서 무엇을 설명 할 수 있습니까?Python - numpy mgrid and reshape

objp = np.zeros((48,3), np.float32) 
objp[:,:2] = np.mgrid[0:8,0:6].T.reshape(-1,2) 

누군가가 나에게 무엇을 정확하게 np.mgrid [0 6 : 8,0] 설명 할 수 코드의 코드의 일부가하고있는 것과 정확히 T.reshape (-1,2) 부분을 하고있다?

감사합니다.

+1

(2,8,6) 배열을 만들고이를 (6,8,2)로 바꾸고 (48,2) – hpaulj

+0

에 감사합니다. @Bo Peng, 나는 똑같은 질문을했습니다. – tpk

답변

1

두 번째 줄은 multi-dimensional mesh grid, transposes입니다. reshapes이 두 열을 나타내며 objp 배열의 처음 두 열에 삽입됩니다.

내역 :

np.mgrid -1

>> np.mgrid[0:8,0:6] 
array([[[0, 0, 0, 0, 0, 0], 
     [1, 1, 1, 1, 1, 1], 
     [2, 2, 2, 2, 2, 2], 
     [3, 3, 3, 3, 3, 3], 
     [4, 4, 4, 4, 4, 4], 
     [5, 5, 5, 5, 5, 5], 
     [6, 6, 6, 6, 6, 6], 
     [7, 7, 7, 7, 7, 7]], 

     [[0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5], 
     [0, 1, 2, 3, 4, 5]]]) 

가 .T는 전치 행렬, ​​상기 .reshape ([0 : 8,0는 6] 다음 MGRID를 작성 , 2) 그런 다음 그것을 2 열로 배열 모양으로 재구성합니다. 이 두 열은 원래 배열의 두 열을 바꿀 올바른 모양입니다.

3

이 참조하는 가장 쉬운 방법은 mgrid 대한 작은 값을 사용하는 것이다

In [11]: np.mgrid[0:2,0:3] 
Out[11]: 
array([[[0, 0, 0], 
     [1, 1, 1]], 

     [[0, 1, 2], 
     [0, 1, 2]]]) 

In [12]: np.mgrid[0:2,0:3].T # (matrix) transpose 
Out[12]: 
array([[[0, 0], 
     [1, 0]], 

     [[0, 1], 
     [1, 1]], 

     [[0, 2], 
     [1, 2]]]) 

In [13]: np.mgrid[0:2,0:3].T.reshape(-1, 2) # reshape to an Nx2 matrix 
Out[13]: 
array([[0, 0], 
     [1, 0], 
     [0, 1], 
     [1, 1], 
     [0, 2], 
     [1, 2]]) 

그럼 objp[:,:2] =이 결과 0 번째 및 1 번째 열 objp의 설정.