본문 바로가기
Programming (프로그래밍)/Python

[NumPy] Python 리스트와 NumPy 배열의 차이점

by 김조이1 2025. 1. 21.
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 배열
데이터 타입 다양한 데이터 타입을 혼합 저장 가능 동일한 타입의 데이터만 저장 가능
연산 방식 반복 연산 수행 벡터화 연산 수행
메모리 효율성 메모리 효율이 낮음 메모리 효율이 높음
속도 대규모 연산에서 느림 대규모 연산에서 빠름
주요 용도 일반적인 데이터 저장 및 처리 수학, 과학 계산 및 데이터 분석에 최적화
반응형