728x90
Python을 사용하다 보면 리스트랑 NumPy 배열을 헷갈릴 때가 있다. 겉으로는 비슷하게 생겼지만, 실제로는 역할과 특징이 많이 다르다.
import numpy as np
mylist = [1, 2, 3]
myarray = np.array(mylist)
print("List:", mylist) # [1, 2, 3]
print("Array:", myarray) # [1 2 3]
print("Type of list:", type(mylist)) # <class 'list'>
print("Type of array:", type(myarray)) # <class 'numpy.ndarray'>
Python 리스트
- 리스트는 다양한 데이터 타입을 하나의 리스트에 저장할 수 있는 자료구조이다. (Int/Float, String, Boolean 등 서로 다른 데이터 타입을 섞어서 저장이 가능하다.)
- 크기가 동적으로 변하기 때문에 데이터를 추가하거나 삭제하기 편리하다.
NumPy 배열
- NumPy 배열은 같은 타입의 데이터만 저장할 수 있는 구조이다. (모든 요소가 숫자 거나 문자열이어야 한다.)
- 빠른 연산이 가능하고 벡터화된 연산을 지원하기 때문에 대규모 데이터 처리에 적합하다.
- 특히 배열 단위의 수학 연산을 빠르게 처리하고 싶을 때 NumPy를 사용하면 효율적이다.
import numpy as np
import time
# Python 리스트 예시
print("=== Python 리스트 ===")
mylist = [1, "hello", True, [2, 3, 4]]
print("리스트 내용:", mylist) # 다양한 타입 혼합 저장
print("리스트 첫 번째 요소:", mylist[0]) # 첫 번째 요소: 1
print("리스트 마지막 요소:", mylist[-1]) # 마지막 요소: [2, 3, 4]
mylist.append(5) # 데이터 추가
print("데이터 추가 후 리스트:", mylist)
mylist.remove("hello") # 데이터 삭제
print("데이터 삭제 후 리스트:", mylist)
print("리스트 슬라이싱 (1부터 3까지):", mylist[1:4]) # [True, [2, 3, 4], 5]
# NumPy 배열 예시
print("\n=== NumPy 배열 ===")
myarray = np.array([1, 2, 3, 4])
print("NumPy 배열 내용:", myarray) # 모든 요소가 정수
print("배열의 데이터 타입:", myarray.dtype) # 데이터 타입: int64
# 배열 연산 예시
print("\n배열 * 2:", myarray * 2) # [2 4 6 8] (모든 요소에 2를 곱함)
another_array = np.array([10, 20, 30, 40])
print("배열 간 덧셈:", myarray + another_array) # [11 22 33 44] (요소별 덧셈)
# 다차원 배열 예시
two_d_array = np.array([[1, 2, 3], [4, 5, 6]])
print("\n2D 배열:\n", two_d_array)
three_d_array = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("3D 배열:\n", three_d_array)
# 성능 비교: 리스트 vs NumPy 배열
print("\n=== 성능 비교 ===")
# Python 리스트 연산
python_list = list(range(1, 1000000))
start = time.time()
python_result = [x * 2 for x in python_list]
end = time.time()
print("Python 리스트 연산 시간:", end - start)
# NumPy 배열 연산
numpy_array = np.array(python_list)
start = time.time()
numpy_result = numpy_array * 2
end = time.time()
print("NumPy 배열 연산 시간:", end - start)
정리
특징 | Python 리스트 | NumPy 배열 |
데이터 타입 | 다양한 데이터 타입을 혼합 저장 가능 | 동일한 타입의 데이터만 저장 가능 |
연산 방식 | 반복 연산 수행 | 벡터화 연산 수행 |
메모리 효율성 | 메모리 효율이 낮음 | 메모리 효율이 높음 |
속도 | 대규모 연산에서 느림 | 대규모 연산에서 빠름 |
주요 용도 | 일반적인 데이터 저장 및 처리 | 수학, 과학 계산 및 데이터 분석에 최적화 |
반응형
'Programming (프로그래밍) > Python' 카테고리의 다른 글
[NumPy] NumPy에서 랜덤 숫자 생성하기 (0) | 2025.01.23 |
---|---|
[NumPy] NumPy로 배열을 생성하는 방법 (0) | 2025.01.22 |
[Python] 주피터(Jupyter) 패키지 설치 및 관리를 위한 터미널 (Terminal)에서 pip 사용법 (0) | 2022.04.12 |
[머신러닝] sklearn.datasets에서 mnist_784 데이터 다운로드가 안될 때 (데이터 값이 0일 때) (0) | 2022.03.14 |
[Python] 주피터(Jupyter) 설치 방법 (맥북) (0) | 2021.06.27 |