NumPy는 Python에서 과학 컴퓨팅을 위한 기본 패키지로, 고성능의 다차원 배열 객체와 수학적 연산을 지원합니다. 쉽게 말해, 대규모 배열을 효율적으로 처리하고 빠르게 수학적 연산을 할 수 있게 해주는 도구입니다. 이를 통해 복잡한 수학적 수식을 계산할 때, 특히 행렬 연산을 매우 간단하고 빠르게 할 수 있습니다.

image.png

3학년 1학기 인공지능

image.png

3학년 1학기 제어공학기초

전자공학부 학생들이 수강하는 인공지능이나 제어공학 수업에서는 매우 복잡한 행렬 연산을 다루게 됩니다. 예를 들어, 로봇 제어 시스템이나 신경망 모델을 설계할 때 수많은 행렬을 처리해야 하는데, 손으로 계산하기엔 너무 복잡하고 시간이 오래 걸립니다. 이때 NumPy는 다음과 같은 방식으로 문제를 해결합니다:

딥러닝에서 신경망을 훈련시키는 과정에서는 수많은 미분 계산이 필요합니다. PyTorch와 같은 라이브러리는 NumPy와 함께 사용되며, 기본적인 배열 연산을 NumPy로 처리하고, 그 위에서 미분 및 역전파 작업을 PyTorch가 수행합니다

여기서 파이썬을 좀 다루어 보았던 사람들이라면 배열은 리스트로도 다룰 수 있지 않냐? 라는 생각이 들을 수도 있습니다. 맞는 말입니다. 행렬 연산은 리스트로도 가능하긴 하죠.

하지만 NumPy는 겉은 Python이지만 속은 C로 구현되어있어서 압도적으로 빠른 연산 속도를 자랑합니다.

다음과 같은 실험을 해보도록 하겠습니다.

# 실험: Python List vs NumPy Array
import time
import numpy as np
import matplotlib.pyplot as plt

# Python List로 5억 개 숫자 더하기
python_list = list(range(500000000))
start = time.time()
result1 = [x + 1 for x in python_list]
python_time = time.time() - start

# NumPy Array로 같은 작업
numpy_array = np.arange(500000000)
start = time.time()
result2 = numpy_array + 1
numpy_time = time.time() - start

print(f" Python List: {python_time:.4f}초")
print(f" NumPy Array: {numpy_time:.4f}초")
print(f" NumPy가 {python_time/numpy_time:.1f}배 빠름!")

image.png

다음과 같이 Numpy Array 계산이 18배 정도 더 빠른것을 알 수 있습니다.

NumPy의 주요 기능

image.png