[Numpy] 배열(array) 합치기(np.concatenate)
- Python/Numpy
- 2022. 1. 5.
넘파이로 만든 ndarray를 합치는 방법입니다.
이전 포스팅에서 설명했던 append와는 약간 다릅니다.
append는 ndarray가 아닌 숫자나 리스트도 추가할 수 있었다면 np.concatente는 ndarray만을 합칩니다.
파라미터는 다음과 같습니다.
np.concatenate(($a_1$,$a_2$,...), axis=0, out=None, dtype=None, casting = "same_kind")
- $a_1$,$a_2$,... : ndarray이며 반드시 같은 shape여야 합니다.
- axis : 축을 의미하고 0~2까지 가능하고 디폴트는 0입니다.
- out : ndarray이며 연결된 배열의 최종 모양을 보여줍니다. 반드시 합쳤을때의 모양과 일치해야합니다.
- dtype : 타입을 보여주는데 out과 같이 쓸수는 없습니다.
- casting : {'no','equiv','safe','same_kind','unsafe'} 중의 하나로 넣을 수 있고 발생할 수 있는 데이터 캐스팅의 종류를 제어합니다. 디폴트는 'same_kind' 입니다.
참고로, out, dtype, casting은 잘 쓰진 않습니다.
축에 따라서 수직, 수평, 깊이로 합칠 수 있고 axis로 설정하고 각 축마다 대체 메쏘드가 있습니다.
데이터를 쌓는 자료구조인 stack을 따서 만든 것으로 예상되는데,
수직(axis=0)일때는 np.vstack, 수평(axis=1)일때는 np.hstack, 깊이(depth)는 np.dstack으로 할 수 있습니다.
[배열(array) 합치기]
수직(axis=0)으로 합치기(np.vstack(), np.concatenate(axis=0))
수직으로 합치는 방법입니다.
row_wize로 더해지며 shape이 같을 때만 합칠 수 있습니다.
(3,3) 행렬인 a에 10배를 해서 b를 만들어서 합치도록 하겠습니다.
a = np.arange(9).reshape(3,3)
b = a*10
합칠때는 튜플로 해당 ndarray를 넣어서 합니다.
np.concatenate((a,b),axis=0) # np.vstack((a,b))
수평(axis=1)로 합치기(np.hstack(), np.concatenate(axis=1))
수평으로 합치는 방법으로 column으로 더해집니다.
np.concatenate((a,b),axis=1) # np.hstack((a,b))
깊이(axis=2)로 합치기(np.dstack(), np.concatenate(axis=2))
깊이로 합치는 방법입니다.
2차원인 경우 가지고 있는 상태 그대로 쌓습니다.
비유를 들자면 a와 b 가 하나의 사각형인데 사각형을 위로 쌓는 방식입니다.
정육면체인 경우 정육면체를 쌓게 됩니다.
np.concatenate((a,b),axis=2) # np.dstack((a,b))
모양을 살펴보면 다음과 같습니다.
np.concatenate((a,b),axis=2).shape
a와 b는 (3,3) 인데 쌓여서 (3,3,2) 모양이 되었습니다.
3차원인 경우도 마찬가지로 ndarray가 그 자체로 쌓이는 것을 볼 수 있습니다.
방금 만들어진 ndarray는 3차원이므로 같은것을 합쳐보겠습니다.
d = np.concatenate((a,b),axis=2)
np.concatenate((d,d),axis=2)
np.concatenate((d,d),axis=2).shape
관련 포스팅
'Python > Numpy' 카테고리의 다른 글
[파이썬] 절대값 출력하기 (0) | 2024.03.07 |
---|---|
NumPy를 활용한 다차원 배열의 평탄화 (0) | 2023.06.22 |
[Numpy] 배열 분할하기(np.split) (0) | 2022.01.03 |
[Numpy] 분포함수(distribution) (0) | 2021.11.20 |
[numpy] 행렬식, 고유값 계산하기(np.linalg) (0) | 2021.11.06 |