📚 쌓을까? 붙일까? NumPy stack() vs concatenate() 완전정복 😎
오랜 시간 고민하고, 실수도 해보고, 질문도 여러 번 해본 끝에 드디어 NumPy 배열 연결의 세계를 이해하게 되었습니다! 🎉
이번 글에서는 제가 실제로 공부하며 생긴 궁금증과 이해 과정을 바탕으로, concatenate()
와 stack()
의 개념을 예시와 함께 최대한 쉽게 정리해보겠습니다!
1. 🤯 처음엔 헷갈렸어요
처음엔 axis라는 말도 어렵고, stack은 왜 자꾸 차원을 늘리는지 이해가 안 갔습니다.
심지어 np.stack((a, b), axis=2)
결과를 손으로 계산하다 실수도 했죠 😂 하지만 그 실수 덕분에 개념이 더 확실해졌습니다.
2. 🧻 concatenate() - 축을 기준으로 배열 연결하기
concatenate
는 아주 단순합니다. “붙이기만 한다!”
concatenate는
👉 "그 축을 기준으로 이어붙이기"
👉 "차원은 그대로 유지됨"
👉 "그 축을 기준으로 이어붙이기"
👉 "차원은 그대로 유지됨"
📌 예시:
a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
np.concatenate((a, b), axis=0)
# 결과: [[1 2], [3 4], [5 6], [7 8]] → shape: (4, 2)
np.concatenate((a, b), axis=1)
# 결과: [[1 2 5 6], [3 4 7 8]] → shape: (2, 4)
주의: 연결하려는 배열들은 차원 수가 같아야 하고, 연결하지 않는 축의 크기도 같아야 합니다.
3. 📦 stack() - 새로운 축을 만들어 덩어리로 쌓기
stack
은 concatenate와 달리, “비집고 들어가서” 새로운 축이 생깁니다.
stack은
👉 "차원을 하나 늘린다"
👉 "묶어서 쌓는다 (덩어리 개념)"
👉 "shape이 (N, ...) → (K, N, ...) 이런 식으로 됨"
👉 "차원을 하나 늘린다"
👉 "묶어서 쌓는다 (덩어리 개념)"
👉 "shape이 (N, ...) → (K, N, ...) 이런 식으로 됨"
📌 예시:
a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
np.stack((a, b), axis=0)
# 결과: shape (2, 2, 2) → 덩어리 2개
np.stack((a, b), axis=1)
# 결과: shape (2, 2, 2) → 각 행끼리 [a, b] 묶기
np.stack((a, b), axis=2)
# 결과: shape (2, 2, 2) → 각 값 위치별로 [a, b] 묶기
4. ⚔️ concatenate vs stack 비교
기능 | concatenate | stack |
---|---|---|
차원 수 변화 | 변화 없음 | 차원 +1 |
축 지정 의미 | 어디로 붙일지 | 어디에 새 축을 넣을지 |
기본 예시 | (2,2)+(2,2) → (4,2) or (2,4) | (2,2)+(2,2) → (2,2,2) |
5. 🤹 배열이 3개 이상이면?
당연히 가능합니다! 배열이 여러 개일 때도 concatenate()
와 stack()
모두 OK!
a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
c = [[9, 10], [11, 12]]
np.concatenate((a, b, c), axis=1) # shape: (2, 6)
np.stack((a, b, c), axis=0) # shape: (3, 2, 2)
np.stack((a, b, c), axis=1) # shape: (2, 3, 2)
np.stack((a, b, c), axis=2) # shape: (2, 2, 3)
stack은 합치는 배열 개수만큼 원하는 축으로 밀어 넣기! 결국 비집고 들어가니까 한 축이 더 생긴다는 걸 기억하세요.
6. ✅ 마무리 정리
💡 내가 이해한 정리 문장
stack()은
👉 “합치는 배열 개수만큼 원하는 축으로 밀어 넣기!”
👉 “결국 비집고 들어가니까 한 축 더 생김!”
concatenate()는
👉 “그냥 배열들을 연결만 하기, 축 지정 시 축을 기준으로 붙이기!”
stack()은
👉 “합치는 배열 개수만큼 원하는 축으로 밀어 넣기!”
👉 “결국 비집고 들어가니까 한 축 더 생김!”
concatenate()는
👉 “그냥 배열들을 연결만 하기, 축 지정 시 축을 기준으로 붙이기!”
'Python > Numpy' 카테고리의 다른 글
NumPy reshape() 완벽 정리! 🔥 - 사용법, -1 옵션, ndim 차이까지 한 번에 (0) | 2025.05.01 |
---|---|
NumPy 배열의 shape 완벽 정리 😎 (0) | 2025.05.01 |
NumPy copy() vs view() 완벽 정리! 🧠 - 메모리와 성능까지 꿰뚫자 (0) | 2025.04.29 |
리스트에 사칙연산 하려다 멘붕 오면, 그건 NumPy를 부를 시간이다 🧠 (0) | 2025.04.24 |
numpy.__version__ 왜 확인할까? 🧐 (0) | 2025.04.24 |