넘파이 (Numpy) 핵심 가이드
이 섹션에서는 데이터 과학과 수치 계산의 핵심 패키지인 Numpy(넘파이)에 대해 다룹니다. 데이터 구조를 극적으로 단순화시키는 ‘방정식과 행렬’의 수학적 원리부터 시작하여, 다차원 배열(ndarray) 객체의 생성, 슬라이싱, 형태 변경, 브로드캐스팅, 그리고 다양한 수학 연산 및 배열 결합/분할 함수까지 깊이 있는 내용을 논리적 섹션으로 그룹화하여 학습합니다.

학습목표
- 대용량 데이터 연산의 기반이 되는 선형대수(방정식과 행렬)의 기초 원리를 수학적 직관으로 이해합니다.
- 다차원 배열 데이터 구조인
ndarray의 특징과 메모리 구조를 파악하고 형태를 자유자재로 다룰 수 있습니다. - 데이터 분석의 필수 도구인 넘파이의 강력한 배열 연산, 슬라이싱, 브로드캐스팅(Broadcasting) 기술을 실무에 적용해 봅니다.
과목 핵심 목차
4.1 산술에서 대수학으로 (방정식)
AI 딥러닝과 코딩을 관통하는 거대한 텐서 연산은 사실 구시대의 낡은 “방정식 \(x, y, z\)“의 세계에서 비롯되었습니다. 방정식을 통해 변수가 탄생하고, 기하 공간에서 해를 탐색하는 대수학의 본질적 기원을 배웁니다.
- 4.1.0 산술에서 대수학으로 (미지의 x 등장)
- 4.1.1 양팔 저울과 등식 (방정식 풀이)
- 4.1.2 교차점 스캐너 (연립방정식)
- 4.1.3 거대한 무기, 포물선 곡선 (이차방정식)
- 4.1.4 방정식이 폭발할 때, 행렬이 강림하다
4.2 데이터 블록과 시공간 왜곡 (행렬)
수만 개의 방정식 껍데기를 버리고, 오직 엑기스 숫자(계수)만 추출하여 2차원 평면에 늘어놓는 마법의 타일 덩어리, ‘행렬’의 탄생을 알아봅니다.
- 4.2.0 왜 갑자기 행렬인가? (방정식의 한계)
- 4.2.1 행렬의 구조 (행과 열)
- 4.2.2 행렬의 덧셈과 뺄셈
- 4.2.3 스케일 폭주 (실수배)
- 4.2.4 행과 열의 십자 충돌 (곱셈의 미스터리)
- 4.2.5 선형 변환 마법진 (벡터의 왜곡)
- 4.2.6 GPU 텐서 폭격과 파이썬 Numpy
4.3 넘파이 기초와 벡터/행렬의 이해
본격적으로 파이썬 과학용 컴퓨팅 패키지 numpy를 개괄하고 다차원 배열의 대표적 자료형인 ndarray의 구조와 shape, ndim, dtype 등의 주요 속성을 다룹니다.
- 4.3.1 과학용 컴퓨팅 패키지 numpy 개요
- 4.3.2 다차원 배열 자료형 ndarray
- 4.3.3 넘파이의 다양한 기본 자료형 (dtype)
- 4.3.4 배열의 차원수 감지기 (.ndim)
- 4.3.5 이미지 배열의 크기 확인 (.size, .nbytes)
4.4 다차원 배열 생성과 초기화
특정한 초깃값을 바탕으로 안전하고 신속하게 크기만 지정된 다차원 데이터 포맷을 찍어내는 arange, zeros, ones, reshape 등 다양한 배열 생성 내장 함수를 익힙니다.
- 4.4.1 내장함수 array()로 ndarray 생성
- 4.4.2 numpy의 내장함수 arange() 개요
- 4.4.3 배열의 모양을 바꾸는 reshape()
- 4.4.4 일정한 간격의 값으로 배열을 만드는 linspace()
- 4.4.5 내장함수 arange()와 linspace() 비교
- 4.4.6 원소가 모두 0인 배열을 생성하는 zeros()
- 4.4.7 원소가 모두 1인 배열을 생성하는 ones()
- 4.4.8 대각선 원소가 모두 1인 2차원 배열을 만드는 eye()
- 4.4.9 원소가 모두 특정 값인 배열을 만드는 full()
- 4.4.10 초기화되지 않은 배열을 생성하는 empty()
- 4.4.11 내장함수 zeros_like()와 ones_like(), full_like()
4.5 행렬 연산과 범용 함수
Numpy 배열간의 기본 사칙연산과 다양한 통계 요약 정보를 한 방에 처리하는 범용 함수(ufunc)를 배웁니다.
4.6 브로드캐스팅 (Broadcasting)
형태가 다른 배열 간의 연산을 가능하게 해주는 마법 같은 차원 확대 및 매칭 기술인 브로드캐스팅을 훈련합니다.
4.7 배열 슬라이싱 (Array Slicing)
초대용량 빅데이터에서 원하는 부분만 가장 빠르고 세련되게 추출해내는 조건 검색 및 슬라이싱(자르기) 기술을 훈련합니다.
4.8 배열 인덱싱 (Array Indexing)
데이터의 특정 위치를 정확히 찌르거나 조건에 맞는 요소를 논리적으로 필터링하는 배열 색인(Indexing) 기술을 배웁니다.
4.9 배열 형태 변환과 메모리 시점
배열의 생김새를 뒤집거나, 원본을 보존한 채 참조 복사(View)만으로 새로운 각도에서 다차원 데이터를 바라보는 고급 메모리 관리 지식을 배웁니다.
- 4.9.1 배열 평탄화 (ravel)
- 4.9.2 대칭 반전과 축 교환 (Transpose & Swapaxes)
- 4.9.3 메모리 뷰 (View)와 얕은 복사
- 4.9.4 독립적 복사본 (Copy)과 base 추적
4.10 배열 결합과 분할
작은 데이터 블록 조각들을 가로/세로 축을 기준으로 결합해 병합 데이터셋을 조립하거나 쪼개 분할하는 방법을 배웁니다.
- 4.10.1 배열 결합 개요
- 4.10.2 numpy.vstack()
- 4.10.3 numpy.hstack()
- 4.10.4 배열 결합 연산 column_stack()과 row_stack()
- 4.10.5 배열 결합 연산 concatenate()와 stack()
- 4.10.6 column_stack()과 hstack()
- 4.10.7 row_stack()과 vstack()
- 4.10.8 np.c_[]
- 4.10.9 np.r_[]
- 4.10.10 1차원 배열, 벡터의 다양한 결합 방법
- 4.10.11 1차원 배열의 다양한 결합 방법 정리
- 4.10.12 유용한 함수 split()
- 4.10.13 분할 함수 hsplit()과 vsplit()
- 4.10.14 분할 함수 array_split()
4.11 난수 생성
데이터 분석 시뮬레이션 및 무작위 샘플링을 위한 난수 발생 모듈(np.random) 기법을 익힙니다.
4.12 넘파이 종합 연습문제
지금까지 배운 배열 조작, 다차원 인덱싱, 불리언 필터링 등을 결합하여 파이썬 프로그래밍 실전 능력을 종합적으로 점검합니다.
정리
이번 Numpy 과목을 통해 우리는 복잡하고 구불구불한 2차원 표와 다차원 텐서 구조를 넘파이라는 강력한 라이브러리로 압축하여 효율적인 코드로 통제할 수 있게 되었습니다. 벡터화 연산 최적화, 그리고 브로드캐스팅의 힘은 이어지는 데이터프레임 도구 Pandas와 딥러닝 응용 과정에서 든든한 수학적/프로그래머적 무기가 되어줄 것입니다.