-
[Python] list, array, numpy array 비교언어/파이썬 & 장고 2022. 8. 14. 21:42
파이썬에서 데이터를 담는 컨테이너 타입 중, list의 경우엔 선언을 크게 위 3가지로 나눌 수 있습니다. 각각의 형태와 장단점을 설명해 봅니다.
list
기본적으로 사용할 수 있는 리스트는 동적 타이핑 덕분에 서로 다른 데이터 타입의 요소를 담을 수 있습니다.
_list = [True, 3, "3", 3.3] [type(i) for i in _list] # [bool, int, str, float]
이러한 유연성에는 비용이 따르는데 리스트의 각 항목에 타입 정보와 참조 횟수, 기타 정보가 들어가야 합니다. 즉, 각 항목이 완전한 파이썬 객체인 것입니다. 모든 변수가 같은 타입인 경우 이 정보가 대부분 불필요하게 중복되므로 고정 타입 배열에 데이터를 저장하는 것이 더 효율적일 수 있습니다.
array
데이터를 효율적인 고정 타입 데이터 버퍼에 저장하는 다양한 방식을 제공하는데 파이썬 3.3부터 제공하는 array라는 내장 모듈이 그 중 하나입니다.
import array arr = array.array('i', [1, 2, 3, 4, 5]) # array('i', [1, 2, 3, 4, 5])
array의 첫 번째 파라미터는 아래와 같은 표에 따릅니다.
numpy의 array
파이썬 내장 모듈인 array 모듈은 데이터에 효율적인 저장소만을 제공해주는 반면, numpy는 효율적인 저장소를 제공할 뿐만 아니라 효율적인 연산도 가능하게 해줍니다.
import numpy as np np.array([1, 3, 4, 6])
numpy는 배열의 모든 요소가 같은 타입이여야 합니다. 일치하지 않으면 numpy는 가능한 경우, 상위 타입을 취하게 만듭니다.
import numpy as np np.array([1.2, 3, 4, 6])
정수가 상위 타입인 부동 소수점으로 변환된 예시입니다.
명시적으로 결과 배열의 데이터 타입을 설정하려면 dtype 키워드를 사용하면 됩니다.
import numpy as np np.array([1, 3, 4, 6], dtype='float32')
결론
동적으로 사용하기 편하게 쓰려면 기본 list
저장만 효율적으로 하려면 array 모듈
저장 이후 연산을 효율적으로 하려면 numpy의 array