🧠 벡터의 차원 vs NumPy의 차원 — 헷갈리는 당신을 위해 🙃
🤔 1. 왜 이 주제를 꺼냈을까?
머신러닝 관련 수학을 공부하면서 자꾸 '차원'이라는 단어가 튀어나오는데요. 벡터의 차원? NumPy 배열의 차원? 그게 같은 말 아니야? 라고 생각했던 저... 아니었습니다 😂 그래서 이 문제를 진짜로 파헤쳐 보기로 했어요.
벡터와 NumPy 배열은 다릅니다!
📐 2. 벡터에서 말하는 "차원"이란?
수학에서는 벡터의 차원이란 "방향의 수"를 의미합니다. 예: [1, 2, 3]
은 3차원 벡터입니다.
왜? x, y, z 세 방향을 나타내니까요. 한 벡터에 세 개의 숫자가 있다는 건, 세 개의 축 위에서 위치를 표현할 수 있다는 의미죠.
🧊 3. NumPy 배열에서의 "차원"이란?
NumPy의 차원은 벡터의 차원과 다르게 "축(axis)의 수"입니다. 얼마나 중첩된 리스트 구조인가를 의미하죠!
- 1D:
[1, 2, 3]
→ shape: (3,) - 2D:
[[1, 2, 3]]
→ shape: (1, 3) - 3D:
[[[1, 2, 3]]]
→ shape: (1, 1, 3)
📌 요약: 벡터는 "방향", NumPy는 "몇 장을 포장했나"!
😵 4. 그럼 왜 헷갈릴까?
같은 데이터라도 포장(구조) 수가 다르면 shape이 달라지기 때문입니다. 수학적 값 vs 프로그래밍 구조!
예를 들어, np.array([[[1]]])
은 shape이 (1, 1, 1)
인 3차원 배열이지만,
수학적으로는 그냥 스칼라 값 1일 뿐이에요!
이처럼, 데이터는 같지만 배열 구조가 다르면 shape도 다르다는 점이 처음엔 헷갈릴 수 있어요.
✔ 요약: 수학은 위치, NumPy는 저장구조!
🧠 5. 헷갈리지 않는 법
- 벡터는 방향에 집중!
- NumPy 배열은 '데이터가 몇 겹으로 포장돼 있는가'에 집중!
- 항상
.shape
를 살펴서 포장 수를 눈으로 확인하자!
🧪 6. 예시 실습
import numpy as np
x = np.array([[[1]]])
print(x.shape) # (1, 1, 1)
print(x[0, 0, 0]) # 1
print(np.array([1, 2, 3]).ndim) # 1
print(np.array([[1, 2, 3]]).ndim) # 2
print(np.array([[[1, 2, 3]]]).ndim) # 3
🙏 7. 마무리하며
차원이라는 단어 하나가 상황에 따라서 이렇게 다른 의미를 가질 수 있다는 걸 알고 나니, 앞으로는 덜 헷갈릴 것 같아요. 벡터와 NumPy는 둘 다 “차원”을 말하지만, 완전히 다른 세상의 언어라는 것! 그 차이를 이해하는 순간, 진짜 Numpy 세계로 한 발 더 들어온 느낌입니다 💪
🎉 핵심 요약: 벡터=방향, NumPy=포장 구조 🌍