본문 바로가기
5-2 . Numpy 제공 자료구조/Array 합치기

[파이썬 numpy] 배열 합치기 (concatenate 메소드) + axis 개념

by 만다린망고 2020. 10. 16.
반응형

[파이썬 numpy] 

배열 합치기 (concatenate 메소드) + axis 개념


concatenate 메소드는 선택한 축(axis)의 방향으로 배열을 연결해주는 메소드입니다. concatenate 는 '사슬 같이 연결하다'는 의미입니다. 


1,2,3차원배열에 적용해보며 사용 방법과 축의 의미를 이해해봅시다. 




1차원 배열


먼저 배열을 정의하겠습니다 .


import numpy as np


A1=np.array([1,2,3])

B1=np.array([4,5,6])


>>> A1

array([1, 2, 3])


>>> B1

array([4, 5, 6])


아래와같이 1차원 배열에 concatenate 메소드를 적용해봅시다. axis=0으로 하였습니다. 


>>> np.concatenate((A1,B1),axis=0)

array([1, 2, 3, 4, 5, 6])


1차원에서 axis=0 는 행방향이나 열방향이라는 개념이 없습니다. 행,열 방향은 행렬부터 의미가 있습니다. 우리는 [1,2,3] 과 [4,5,6] 이라는 1차원배열을 연결했는데요. 아래와 같이 두가지 연결 중 어느 것으로 생각해도 


1 2 3 (연결) 4 5 6


1

2

3

(연결)

4

5

6


결과적으로 [1,2,3,4,5,6] 인 벡터가 생성됩니다. 


axis=1로 적용해봅시다.


>>> np.concatenate((A1,B1),axis=1)

Traceback (most recent call last):

  File "<pyshell#13>", line 1, in <module>

    np.concatenate((A1,B1),axis=1)

  File "<__array_function__ internals>", line 6, in concatenate

numpy.AxisError: axis 1 is out of bounds for array of dimension 1


axis=1 에서 에러가 발생한 이유는 방향이 axis=0 하나 뿐이기 때문입니다. '직선'이라고 생각하시면 됩니다. 직선에는 방향이 하나 뿐입니다. 길이 방향만 있고 높이 방향은 없기 때문에 axis=1이 정의되지 않는 것입니다. 




2차원 배열


먼저 배열을 정의하겠습니다.


A2=np.array([ [1,2,3],[10,20,30] ])

B2=np.array([ [4,5,6],[40,50,60] ])


>>> A2

array([[ 1,  2,  3],

       [10, 20, 30]])


>>> B2

array([[ 4,  5,  6],

       [40, 50, 60]])


아래와 같이 2차원배열에 concatenate 함수를 적용해봅시다. axis=0을 적용해봅시다. 


>>> np.concatenate((A2,B2),axis=0)

array([[ 1,  2,  3],

       [10, 20, 30],

       [ 4,  5,  6],

       [40, 50, 60]])


2차원 배열에서 axis=0 는 행(위->아래)방향을 의미합니다. concatenate아래와 같이 연결된 것입니다. 


1 2 3

4 5 6

(연결)

10 20 30

40 50 60


이번에는 axis=1 을 적용해봅시다. 


>>> np.concatenate((A2,B2),axis=1)

array([[ 1,  2,  3,  4,  5,  6],

       [10, 20, 30, 40, 50, 60]])


axis=1 은 열방향(좌->우)을 의미합니다. 아래와 같이 연결됩니다.


1 2 3 (연결) 10 20 30

4 5 6 (연결) 40 50 60 


2차원배열에서는 axis=0 과 axis=1 만 존재합니다. axis=2를 입력하면 오류가 발생합니다. 




3차원 배열


먼저 배열을 정의하겠습니다.


A3=np.array([ [[1,2,3,4],[10,20,30,40]], [[100,200,300,400],[10000,2000,3000,4000]] ])

B3=np.array([ [[5,6,7,8],[50,60,70,80]], [[500,600,700,800],[5000,6000,7000,8000]] ])


>>> A3

array([[[    1,     2,     3,     4],

        [   10,    20,    30,    40]],


       [[  100,   200,   300,   400],

        [10000,  2000,  3000,  4000]]])


>>> B3

array([[[   5,    6,    7,    8],

        [  50,   60,   70,   80]],


       [[ 500,  600,  700,  800],

        [5000, 6000, 7000, 8000]]])


아래와 같이 3차원배열에 concatenate 함수를 적용해봅시다. axis=0을 적용해봅시다. 


>>> np.concatenate((A3,B3),axis=0)

array([[[    1,     2,     3,     4],

        [   10,    20,    30,    40]],


       [[  100,   200,   300,   400],

        [10000,  2000,  3000,  4000]],


       [[    5,     6,     7,     8],

        [   50,    60,    70,    80]],


       [[  500,   600,   700,   800],

        [ 5000,  6000,  7000,  8000]]])


높이 방향으로 연결된 것을 알 수 있습니다. 3차원 배열에서 axis=0 은 높이방향을 의미합니다. 


이번에는 axis=1 을 적용해봅시다. 


>>> np.concatenate((A3,B3),axis=1)

array([[[    1,     2,     3,     4],

        [   10,    20,    30,    40],

        [    5,     6,     7,     8],

        [   50,    60,    70,    80]],


       [[  100,   200,   300,   400],

        [10000,  2000,  3000,  4000],

        [  500,   600,   700,   800],

        [ 5000,  6000,  7000,  8000]]])



행방향으로 연결된 것을 알 수 있습니다. 3차원 배열에서 axis=1은 행방향을 의미합니다.


이번에는 axis=2 를 적용해봅시다. 


>>> np.concatenate((A3,B3),axis=2)

array([[[    1,     2,     3,     4,     5,     6,     7,     8],

        [   10,    20,    30,    40,    50,    60,    70,    80]],


       [[  100,   200,   300,   400,   500,   600,   700,   800],

        [10000,  2000,  3000,  4000,  5000,  6000,  7000,  8000]]])


열방향으로 연결된 것을 알 수 있습니다. 3차원 배열에서 axis=2 는 열방향을 의미합니다. 

반응형

댓글