2016-12-24 2 views
0

NumPy로 시작합니다.배열에 NumPy 스택 또는 배열 추가

을 감안할 때 두 np.array의, queunew_path :

queu = [ [[0 0] 
      [0 1]] 
     ] 

new_path = [ [[0 0] 
       [1 0] 
       [2 0]] 
      ] 

내 목표는 queu 다음 얻을 것입니다 : 내가 해봤

queu = [ [[0 0] 
      [0 1]] 
     [[0 0] 
      [1 0] 
      [2 0]] 
     ] 

:

np.append(queu, new_path, 0) 

np.vstack((queu, new_path)) 

그러나 모두

all the input array dimensions except for the concatenation axis must match exactly

내가 NumPy와 철학을하지 않았다 제기된다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

매트릭스가 모든 축에서 같은 수의 요소를 가져야하므로 원하는 결과가 매트릭스가 아닙니다 (예 : 각 행에 정확히 2 개의 요소가있는 3x2-3 행). – sirfz

+0

알았습니다. 나는 2D 매트릭스에서 가능한 모든 방법을 열거하려고합니다. 나는 나의 접근 방식을 바꿀 것이다. –

답변

0

그것은 당신이 당신의 array의를 설정 한 방법을 나에게 완전히 명확하지 않다, 그러나 그것의 소리에서, np.vstack 실제로 당신이 모습이 무엇인지 어떻게해야 : 당신이 필요

In [30]: queue = np.array([0, 0, 0, 1]).reshape(2, 2) 

In [31]: queue 
Out[31]: 
array([[0, 0], 
     [0, 1]]) 

In [32]: new_path = np.array([0, 0, 1, 0, 2, 0]).reshape(3, 2) 

In [33]: new_path 
Out[33]: 
array([[0, 0], 
     [1, 0], 
     [2, 0]]) 

In [35]: np.vstack((queue, new_path)) 
Out[35]: 
array([[0, 0], 
     [0, 1], 
     [0, 0], 
     [1, 0], 
     [2, 0]]) 
1

np.hstack

입니다
In [73]: queu = np.array([[[0, 0], 
          [0, 1]] 
         ]) 
In [74]: queu.shape 
Out[74]: (1, 2, 2) 

In [75]: new_path = np.array([ [[0, 0], 
           [1, 0], 
           [2, 0]] 
          ]) 

In [76]: new_path.shape 
Out[76]: (1, 3, 2) 

In [81]: np.hstack((queu, new_path)) 
Out[81]: 
array([[[0, 0], 
     [0, 1], 
     [0, 0], 
     [1, 0], 
     [2, 0]]]) 
1
In [741]: queu = np.array([[[0,0],[0,1]]]) 
In [742]: new_path = np.array([[[0,0],[1,0],[2,0]]]) 
In [743]: queu 
Out[743]: 
array([[[0, 0], 
     [0, 1]]]) 
In [744]: queu.shape 
Out[744]: (1, 2, 2) 
In [745]: new_path 
Out[745]: 
array([[[0, 0], 
     [1, 0], 
     [2, 0]]]) 
In [746]: new_path.shape 
Out[746]: (1, 3, 2) 

당신은 모양 (1,2,2-)과 (1,3,2)으로,이 개 배열을 정의했습니다. 당신이 그 모양에 대해 의아해하는 경우에 당신은 기본적인 것의 약간을 다시 읽을 필요가있다 numpy 소개.

hstack, vstackappend 모두 concatenate입니다. 3D 배열을 사용하면 문제가 혼동 될뿐입니다.

두 번째 축에 연결합니다.이 축은 1의 크기 2이고 다른 3의 축은 (1,5,2) 배열을 생성합니다.

In [748]: np.concatenate((queu, new_path),axis=0) 
.... 
ValueError: all the input array dimensions except for the concatenation axis must match exactly 

병합 축은 0이지만, 축 (1)의 치수는 다르다 : 축의 0에 참여하려고

In [747]: np.concatenate((queu, new_path),axis=1) 
Out[747]: 
array([[[0, 0], 
     [0, 1], 
     [0, 0], 
     [1, 0], 
     [2, 0]]]) 

(이 hstack에 상당) (vstack)는 사용자의 에러를 생성한다. 따라서 오류.

귀하의 타겟은 유효한 숫자 배열이 아닙니다. 당신은 목록에서 그들을 함께 수집 할 수 있습니다 :

In [759]: alist=[queu[0], new_path[0]] 
In [760]: alist 
Out[760]: 
[array([[0, 0], 
     [0, 1]]), 
array([[0, 0], 
     [1, 0], 
     [2, 0]])] 

또는 객체 DTYPE 배열 -하지만 numpy 고급입니다.