반응형
📌 파이썬 리스트 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가 필수적. 🚀
'십대를 위한 코딩 > 십대를 위한 파이썬' 카테고리의 다른 글
행렬(Matrix)이란? (2) | 2025.02.24 |
---|---|
벡터의 크기와 방향이란? (0) | 2025.02.23 |
파이썬의 철학 (0) | 2025.02.22 |
기반 클래스(Base Class)와 파생 클래스(Derived Class) (1) | 2025.02.21 |
두 코드(mangling1.py vs mangling2.py)의 차이 (2) | 2025.02.20 |