십대를 위한 코딩/십대를 위한 파이썬

파이썬 리스트 vs 넘파이 배열(Numpy ndarray) 차이

forSilver 2025. 2. 22. 14:28
반응형

📌 파이썬 리스트 vs 넘파이 배열(Numpy ndarray) 차이점 정리

차이점 파이썬 리스트 (list) 넘파이 배열 (ndarray)

자료형 서로 다른 자료형 혼합 가능 동일한 자료형 유지
메모리 효율성 메모리 사용량이 많음 메모리 사용량이 적음 (배열 크기가 커질수록 유리)
연산 속도 반복문을 사용해야 하므로 느림 벡터 연산을 지원하여 빠름
연산 방식 for문을 사용하여 요소별 연산 벡터 연산(브로드캐스팅) 지원
다차원 지원 리스트 안에 리스트를 중첩해야 가능 다차원 배열을 기본적으로 지원
함수 지원 기본적인 리스트 함수 제공 수학, 통계, 선형대수 등 다양한 연산 함수 제공
배열 크기 조정 동적 크기 조정 가능 크기 변경 불가능 (새 배열 생성 필요)

1. 기본 차이점 예제

import numpy as np

# 파이썬 리스트
py_list = [1, 2, 3, 4, 5]
print(py_list * 2)  # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] (요소 반복)

# 넘파이 배열
np_array = np.array([1, 2, 3, 4, 5])
print(np_array * 2)  # [2 4 6 8 10] (각 요소에 곱셈 연산 적용)

리스트는 요소를 반복하지만, 넘파이 배열은 요소별 연산이 수행됨.


2. 메모리 효율성 비교

import numpy as np
import sys

# 크기 1000의 리스트와 넘파이 배열 비교
py_list = list(range(1000))
np_array = np.arange(1000)

print("파이썬 리스트 크기:", sys.getsizeof(py_list), "bytes")
print("넘파이 배열 크기:", sys.getsizeof(np_array), "bytes")

일반적으로 NumPy 배열이 더 적은 메모리를 사용함.


3. 연산 속도 비교

import time

size = 1000000

# 파이썬 리스트 연산
py_list = list(range(size))
start = time.time()
py_result = [x * 2 for x in py_list]
end = time.time()
print("파이썬 리스트 연산 시간:", end - start, "초")

# 넘파이 배열 연산
np_array = np.arange(size)
start = time.time()
np_result = np_array * 2  # 벡터 연산
end = time.time()
print("넘파이 배열 연산 시간:", end - start, "초")

NumPy 배열이 훨씬 빠름. 벡터 연산 덕분에 반복문 없이 최적화됨.


4. 다차원 배열 지원

# 파이썬 리스트의 다차원 표현
py_matrix = [[1, 2, 3], [4, 5, 6]]
print(py_matrix[1][2])  # 6

# 넘파이 다차원 배열
np_matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(np_matrix[1, 2])  # 6 (더 직관적인 접근 가능)

넘파이는 다차원 배열을 기본적으로 지원하며, 접근 방식도 간단함.


5. 다양한 수학 연산 지원

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

print("평균:", np.mean(np_array))
print("합계:", np.sum(np_array))
print("최댓값:", np.max(np_array))
print("최솟값:", np.min(np_array))
print("표준편차:", np.std(np_array))

리스트는 이러한 연산을 기본적으로 지원하지 않지만, NumPy는 수학 연산을 쉽게 수행 가능.


💡 결론

  • 파이썬 리스트는 일반적인 데이터 저장 및 다목적 활용에 적합.
  • 넘파이 배열연산 속도, 메모리 효율, 수학적 연산, 다차원 배열 처리에 강력함.
  • 수학, 데이터 분석, 머신러닝 작업에서는 NumPy가 필수적. 🚀