SW/Python

Python NumPy 기초부터 실전 예제까지 한 번에 정리한 완전 가이드 (array·axis·reshape 설명)

얇은생각 2026. 2. 11. 07:30
반응형

Python NumPy 완전 정복 가이드 (2026 버전)

처음 Jupyter Notebook을 열고 빈 셀을 멍하니 바라보다가 이런 생각 해본 적 있나요?

“분명 Python은 아는데… 왜 다들 NumPy, NumPy 하는 거지?”

솔직히 말하면, 저도 그랬습니다. 약간 집단 주문처럼 들리죠.

NumPy는 Numerical Python의 줄임말이고, Data Science, AI, Machine Learning, Scientific Computing 분야에서 사실상 기본 언어처럼 쓰이는 라이브러리입니다. 겉으로는 조용해 보이지만, 내부에서는 엄청난 일을 처리하고 있어요.

한 줄로 요약하면 이렇습니다.

 

NumPy는 숫자 계산 세계에서 ‘수레’에서 ‘컨베이어 벨트’로 업그레이드하는 느낌이다. 같은 짐인데 속도가 완전히 다르다.

 

이 글에서는 설치부터 시작해서 array 생성, dtype, 다차원 배열, slicing, reshape, axis 개념, 통계 연산, linear algebra, 그리고 실제 예제까지—원본 스크립트의 내용을 하나도 빠뜨리지 않고, 한국어 감성으로 자연스럽게 풀어봅니다.

 

NumPy 설치와 Jupyter Notebook 환경

 


NumPy 설치와 Jupyter Notebook 환경

NumPy 관련 내용은 공식 문서(numpy.org)를 기반으로 하지만, 그대로 읽으면 살짝 딱딱하죠. 그래서 핵심만 추려서 실습 중심으로 정리합니다.

 

NumPy 설치

터미널을 열고 아래 명령어를 실행하세요.

pip install numpy
  • Windows 환경이라면 대부분 이 명령으로 바로 됩니다.
  • macOS / Linux에서는 보통 아래를 사용합니다.

 

pip3 install numpy

 

 

NumPy import 하기

NumPy는 거의 항상 이렇게 불러옵니다.

import numpy as np

 

np는 사실상 업계 표준 별명이라고 봐도 무방합니다.

 

 

왜 Jupyter Notebook이 좋을까?

NumPy 작업은 ‘만져보면서 이해하는’ 게 핵심입니다. 셀 하나 실행하고 결과 보고, 다시 수정하고—이 흐름에 Jupyter Notebook만큼 잘 맞는 도구도 드물죠.

VS Code(또는 Cursor 등) 기준으로:

  • Ctrl + Shift + P (Mac은 Command + Shift + P)
  • Jupyter 입력
  • Create New Jupyter Notebook 선택

 

.ipynb 확장자의 파일이 열릴 거예요.

여기서:

  • Markdown 셀로 설명을 적고
  • Code 셀로 바로 실행해볼 수 있습니다.

 

 


NumPy란 정확히 뭘까?

NumPy는 한마디로 말해:

  • 대용량 multi-dimensional arraymatrix를 다루고
  • 그 위에서 빠른 수치 계산을 가능하게 해주는 라이브러리입니다.

 

Data Science, Machine Learning, Scientific Computing 쪽에서는 거의 필수고요.

속도가 빠른 이유요?
내부 연산의 상당 부분이 **C / C++**로 구현되어 있기 때문입니다.

TensorFlow, PyTorch 같은 유명한 framework들도 내부적으로 NumPy 개념을 적극적으로 활용합니다. 그래서 NumPy를 이해하면, 상위 framework에서 무슨 일이 벌어지는지도 훨씬 잘 보입니다.

 

 


왜 NumPy를 써야 할까? (속도와 vectorization)

Python list는 분명 편합니다. 하지만 숫자 계산이 많아지면 얘기가 달라집니다.

NumPy array는:

  • 메모리 사용이 효율적이고
  • 대규모 연산에서 훨씬 빠르며
  • vectorized operation을 기본으로 제공합니다.

 

 

Python list vs NumPy array

py_list = [1, 2, 3, 4, 5]
np_array = np.array([1, 2, 3, 4, 5])

겉보기엔 비슷하지만 내부 구조는 완전히 다릅니다.

  • Python list → list
  • NumPy array → numpy.ndarray

 

 

vectorized operation 예시

Python list에서 모든 값에 10을 더하려면 보통 이렇게 하죠.

[x + 10 for x in py_list]

 

NumPy에서는 훨씬 간단합니다.

np_array + 10

 

이게 바로 vectorization입니다. loop 없이 한 번에 처리합니다.

 

 

속도 차이 체감하기

스크립트에서는 1,000,000개 요소를 대상으로 비교합니다.

  • Python list + for loop
  • NumPy array + scalar addition

 

결과는 대략:

  • Python list: 약 0.035초
  • NumPy: 약 0.001초

 

환경마다 다르겠지만, 수십 배 차이가 나는 경우가 흔합니다.

 

 


NumPy array 생성 방법 정리

Python list에서 생성

np.array([1, 2, 3, 4, 5])

※ NumPy array는 기본적으로 동일한 type을 가집니다.

 

np.arange()

np.arange(0, 10, 2)

Python의 range()와 비슷하지만 array를 반환합니다.

 

np.linspace()

np.linspace(0, 1, 5)

구간을 균등하게 나눈 값들을 생성합니다.

 

zeros, ones, full

np.zeros(5)
np.ones(5)
np.full(5, 7)

 

identity matrix

np.eye(3)

 

random 값 생성

np.random.random(5)
np.random.randint(0, 10, 5)

실행할 때마다 값이 달라집니다. 진짜 랜덤이니까요.

 

 


dtype: NumPy array의 데이터 타입

NumPy array는 항상 하나의 dtype을 가집니다.

arr = np.array([1, 2, 3])
arr.dtype
  • 정수만 있으면 보통 int32
  • 소수점이 있으면 float64

 

 

int + float 섞이면?

np.array([1, 2.5, 3])

→ 자동으로 float64

NumPy는 표현 가능한 쪽으로 type을 승격(promote) 합니다.

 

 

dtype 직접 지정

np.array([1, 2, 3], dtype=np.float32)

 

 

astype()으로 변환

arr.astype(np.float32)

 

새로운 array가 생성됩니다.

  • float32 → 4 bytes
  • float64 → 8 bytes

 

메모리 민감한 상황에서는 꽤 중요해집니다.

 

 


Multi-dimensional array 이해하기

1D array

[1, 2, 3, 4, 5]

 

2D array (matrix)

matrix = np.array([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
])
  • shape → (3, 3)
  • ndim → 2
  • size → 9

 

 

3D array (페이지 개념)

arr3d = np.array([
  [[1,2,3],[4,5,6]],
  [[7,8,9],[10,11,12]]
])

 

shape (2, 2, 3) =

  • 2 pages
  • 2 rows
  • 3 columns

 

shape로 직접 생성

np.zeros((3, 4))
np.ones((2, 3, 4))

 

 


Indexing & Slicing

1D indexing

arr[0]
arr[-1]
arr[1:4]
arr[::2]

 

2D indexing

matrix[1, 2]
matrix[0, :]
matrix[:, 1]
matrix[0:2, 0:2]

 

Boolean indexing

arr[arr > 5]
arr[arr % 2 == 0]

 

조건이 True인 값만 자동으로 골라줍니다.

 

 


Array 연산 (operation)

a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
  • element-wise: a + b, a * b
  • scalar: a + 10, b * 2
  • 비교: a > 2

 

모든 연산이 array 전체에 동시에 적용됩니다.

 

 


reshape, flatten, transpose, concatenate

reshape

arr.reshape(3, 4)

요소 개수는 반드시 같아야 합니다.

 

flatten

matrix.flatten()

 

자동 계산 (-1)

arr.reshape(2, -1)

 

transpose

matrix.T

 

concatenate / stack

np.vstack((A, B))
np.hstack((A, B))
np.concatenate((A, B), axis=0)

 

 


axis 개념 (가장 헷갈리는 부분)

  • axis=0 → 세로 방향 (column 기준)
  • axis=1 → 가로 방향 (row 기준)
np.sum(matrix, axis=0)
np.sum(matrix, axis=1)

 

3D에서도 동일한 원리로 작동합니다.

 

 


통계 연산

  • np.sum, np.mean, np.median
  • np.std, np.var
  • np.min, np.max
  • np.argmin, np.argmax

axis와 함께 쓰면 정말 강력해집니다.

 

 


Linear Algebra

np.dot(a, b)
np.linalg.det(matrix)
np.linalg.inv(matrix)

 

고급 수학 연산도 NumPy 안에서 처리 가능합니다.

 

 


Useful methods

  • 정렬: np.sort, .sort()
  • 중복 제거: np.unique
  • 조건 검색: np.where
idx = np.where(arr > 5)
arr[idx]

 

 


Practical Example 1: Image 처리

이미지는 결국 숫자 배열입니다.

image = np.random.randint(0, 256, (10, 10))

 

밝기 조절

np.clip(image + 50, 0, 255)

 

대비 조절

np.clip(image * 1.5, 0, 255)

 

 


Practical Example 2: 성적 데이터 분석

scores = np.array([
  [85, 90, 88],
  [92, 87, 91],
  [78, 85, 80],
  [95, 98, 96],
  [88, 92, 90]
])

 

  • 학생별 평균: axis=1
  • 시험별 평균: axis=0
  • 최고 점수 학생: argmax
  • 90점 초과 학생 찾기: boolean + np.where

 

 


마무리 한마디

NumPy의 핵심은 결국 이겁니다.

  • array 구조 이해
  • shape / axis 감각 잡기
  • loop 대신 vectorization

axis 개념만 손에 익으면, NumPy는 갑자기 ‘어렵다’에서 ‘시원하다’로 바뀝니다.

처음엔 헷갈려도 괜찮아요. 다 그렇게 시작합니다.

반응형