728x90

np.concatnate


numpy.concatenate((a1, a2, ...), axis=0)를 써서 사용합니다. 여기서 axis=0 행이고 axis=1 열입니다.

  • axis=0이면 열에다가 concat
  • axis=1이면 행에다가 concat
  • axis에 대해 매개변수가 없으면 1차원으로 concat합니다.

 

그림으로 예시를 보여드리겠습니다.  각각 (2,3)의 a와 b의 배열이 있습니다. 두개의 배열에 대해 사용하는 예시를 보여드리겠습니다.

배열 선언

>>> import numpy as np
>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
       
>>> b = np.array([[7,8,9],[10,11,12]])
>>> b
array([[ 7,  8,  9],
       [10, 11, 12]])

 

 

np.concatenate((a, b), axis = None)


None을 입력하면 a와 b의 배열이 1차원으로 펼쳐진다고 생각하면 됩니다.

>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> b
array([[ 7,  8,  9],
       [10, 11, 12]])

>>> np.concatenate((a,b),axis=None)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

 

 

np.concatenate((a, b), axis = 0) , np.concatenate((a, b)), np.vstack((a, b))


세 개의 함수는 동일한 결과를 출력합니다. axis=0일 때, 행을 기준으로 concat, stack하게 됩니다. 자세한 것은 밑의 그림에 나와있습니다.

axis = 0 을 기준으로 a와 b의 배열이 합쳐지는 것을 볼 수 있습니다. vstack에서 v는 vertically를 의미하며 수직으로 쌓인다는 것을 말합니다.

>>> a
array([[1, 2, 3],
       [4, 5, 6]])
       
>>> b
array([[ 7,  8,  9],
       [10, 11, 12]])
       
>>> np.concatenate((a,b))
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
>>> np.concatenate((a,b), axis=0)
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
       # vstack도 동일한 결과 반환
>>> np.vstack((a,b))
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

 

 

np.concatenate((a, b), axis=1), np.hstack((a, b))


두 개의 함수는 동일한 결과를 출력합니다. axis=1일 때, 열을 기준으로 concat, stack하게 됩니다. 자세한 것은 밑의 그림에 나와있습니다.

axis = 1 을 기준으로 a와 b의 배열이 합쳐지는 것을 볼 수 있습니다.hstack에서 h는 horizontally를 의미하며 수평으로 쌓인다는 것을 말합니다.

>>> a
array([[1, 2, 3],
       [4, 5, 6]])
       
>>> b
array([[ 7,  8,  9],
       [10, 11, 12]])
       
>>> np.concatenate((a,b), axis=1)
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])
>>> np.hstack((a,b))
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])

 

 

추가적으로  r_와 c_에 대해서 설명해보겠습니다.

np.r_[a, b]


r_는 np.concatenate((a,b)),  np.vstack((a, b))와 동일하다고 보시면 됩니다.

>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> b
array([[ 7,  8,  9],
       [10, 11, 12]])

>>> np.r_[a,b]
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

 

np.c_[a, b]


c_는 np.concatenate((a,b), axis = 1),  np.hstack((a, b))와 동일하다고 보시면 됩니다.

>>> a
array([[1, 2, 3],
       [4, 5, 6]])
       
>>> b
array([[ 7,  8,  9],
       [10, 11, 12]])
       
>>> np.c_[a,b]
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])

 

출처 : https://numpy.org/doc/stable/reference/generated/numpy.concatenate.html