concatenate 메서드는 선택한 축(axis)의 방향으로 배열을 연결해 주는 메서드!
concatenate는 '사슬 같이 연결하다'는 의미라고 함!
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = np.concatenate((a, b), axis=0)
# [1 2 3 4 5 6 7 8]
우선 1차원 배열에 concatenate 메서드를 적용해 보자! axis는 0으로 함.
우선!! axis란!!
axis는 배열을 연결할 축(dimension)을 지정하는 파라미터임.
np.concatenate()에서 axis 값을 설정함으로써, 배열이 어떤 방향으로 이어 붙일지를 결정!!
axis=0
행 (위 -> 아래) 방향으로 배열을 연결. 즉, 배열들을 위아래로 이어 붙임. 이 경우, 배열의 열 크기(열의 개수)는 동일해야 합니다.
axis=1
열 (좌 -> 우) 방향으로 배열을 연결. 즉, 배열들을 좌우로 이어 붙임. 이 경우, 배열의 행 크기(행의 개수)는 동일해야 합니다..
그럼 1차원 배열에서 axis=1로 적용해 보자!

어!! 1로 적용하면 위와 같은 에러가 남 🚨
에러 메시지에서 나타난 문제는 axis=1이 배열의 차원과 맞지 않는다는 것임!!
구체적으로, "axis 1 is out of bounds for array of dimension 1"라는 에러는 1차원 배열에서 1번 축(axis 1)을 참조하려고 시도했기 때문에 발생함.
axis=1에서 에러가 발생한 이유는 방향이 axis=0 하나뿐이기 때문. '직선'이라고 생각하시면 됨. 직선에는 방향이 하나뿐임. 길이 방향만 있고 높이 방향은 없기 때문에 axis=1이 정의되지 않는 것임!!!
axis=1은 2차원 배열에서 열을 따라 연결하려 할 때 사용됨.
그러나 a와 b가 1차원 배열일 경우, axis=1은 존재하지 않기 때문에 에러가 발생.
1차원 배열의 경우 axis=0만 사용할 수 있음.
그럼 2차원 배열에서 사용해 보자!
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.concatenate((a, b), axis=0)
# [[1 2]
# [3 4]
# [5 6]
# [7 8]]
d = np.concatenate((a, b), axis=1)
# [[1 2 5 6]
# [3 4 7 8]]
2차원 배열에서는 axis=1 가능!! 높이가 존재하기 때문!!
그럼 3차원 배열을 어떻까?? 🤔
3차원 배열에서는 axis=2까지 존재!!
a = np.array([[[1, 2], [3, 4], [5, 6]]])
b = np.array([[[7, 8], [9, 10], [11, 12]]])
c = np.concatenate((a, b), axis=0)
# [[[ 1 2]
# [ 3 4]
# [ 5 6]]
# [[ 7 8]
# [ 9 10]
# [11 12]]]
d = np.concatenate((a, b), axis=1)
# [[[ 1 2]
# [ 3 4]
# [ 5 6]
# [ 7 8]
# [ 9 10]
# [11 12]]]
e = np.concatenate((a, b), axis=2)
# [[[ 1 2 7 8]
# [ 3 4 9 10]
# [ 5 6 11 12]]]
3차원에서 axis = 0는 높이 방향, axis = 1은 행방향, axis = 2는 열 방향을 의미함!