[파이썬 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 는 열방향을 의미합니다.
'5-2 . Numpy 제공 자료구조 > Array 합치기' 카테고리의 다른 글
[파이썬 numpy] 배열의 축(axis) 이해하기 (14) | 2020.11.12 |
---|---|
[파이썬 numpy] 배열 합치기 (stack 메소드) (0) | 2020.10.19 |
댓글