Numpy 배열을 디스크에 저장하는 최적의 방법
Numpy 저장:
- 장점:
- 빠르고 효율적입니다.
- Numpy 배열의 메타데이터를 자동으로 저장합니다.
- 다른 Python 프로그램에서 쉽게 로드할 수 있습니다.
- 단점:
- 다른 형식(예: CSV, JSON)만큼 이식성이 높지 않습니다.
- 텍스트 기반 파일 형식이므로 다른 형식보다 더 많은 디스크 공간을 차지할 수 있습니다.
import numpy as np
# Numpy 배열을 만듭니다.
array = np.array([1, 2, 3, 4, 5])
# 배열을 "data.npy" 파일에 저장합니다.
np.save('data.npy', array)
# 배열을 로드합니다.
loaded_array = np.load('data.npy')
# 두 배열이 동일한지 확인합니다.
print(array == loaded_array) # True
Pickle:
- 장점:
- 이식성이 높습니다.
- 단점:
- Numpy 저장보다 느리고 덜 효율적일 수 있습니다.
- Numpy 배열의 메타데이터를 저장하지 않으므로 로드할 때 직접 설정해야 할 수도 있습니다.
import numpy as np
import pickle
# Numpy 배열을 만듭니다.
array = np.array([1, 2, 3, 4, 5])
# 배열을 "data.pickle" 파일에 저장합니다.
with open('data.pickle', 'wb') as f:
pickle.dump(array, f)
# 배열을 로드합니다.
with open('data.pickle', 'rb') as f:
loaded_array = pickle.load(f)
# 두 배열이 동일한지 확인합니다.
print(array == loaded_array) # True
CSV:
- 장점:
- 단점:
- 큰 배열을 저장하는 데 비효율적일 수 있습니다.
import numpy as np
import csv
# Numpy 배열을 만듭니다.
array = np.array([1, 2, 3, 4, 5])
# 배열을 "data.csv" 파일에 저장합니다.
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(array)
# 배열을 로드합니다.
with open('data.csv', 'r', newline='') as f:
reader = csv.reader(f)
loaded_array = np.array(list(reader))
# 두 배열이 동일한지 확인합니다.
print(array == loaded_array) # True
JSON:
- 장점:
import numpy as np
import json
# Numpy 배열을 만듭니다.
array = np.array([1, 2, 3, 4, 5])
# 배열을 "data.json" 파일에 저장합니다.
with open('data.json', 'w') as f:
json.dump(array.tolist(), f)
# 배열을 로드합니다.
with open('data.json', 'r') as f:
import numpy as np
import json
# 샘플 Numpy 배열 생성
array = np.array([1, 2, 3, 4, 5])
# JSON으로 변환
data = json.dumps(array.tolist())
# JSON 문자열 출력
print(data)
[1, 2, 3, 4, 5]
위 코드는 numpy.array
를 json.dumps
함수에 전달하여 Numpy 배열을 JSON 문자열로 변환합니다. json.dumps
함수는 Python 객체를 JSON 형식의 문자열로 변환합니다.
다음은 JSON 문자열을 다시 Numpy 배열로 변환하는 방법입니다.
import numpy as np
import json
# JSON 문자열 로드
data = '[1, 2, 3, 4, 5]'
# JSON 데이터를 파싱하여 Python 리스트로 변환
array_list = json.loads(data)
# Numpy 배열로 변환
array = np.array(array_list)
# 배열 출력
print(array)
이 코드는 다음과 같은 출력을 생성합니다.
[1 2 3 4 5]
Numpy 배열을 디스크에 저장하는 대체 방법
HDF5:
- 장점:
- 과학 계산 분야에서 널리 사용됩니다.
- 단점:
- Numpy 저장이나 Pickle만큼 사용하기 쉽지 않을 수 있습니다.
- 일부 프로그래밍 언어에는 HDF5 라이브러리가 기본적으로 설치되어 있지 않을 수 있습니다.
Zarr:
- 장점:
- HDF5와 유사하지만 더 빠르고 효율적일 수 있습니다.
- 압축 및 병렬 처리를 지원합니다.
- 클라우드 스토리지에 적합합니다.
- 단점:
- HDF5만큼 성숙한 형식이 아니므로 일부 기능이 부족할 수 있습니다.
- Zarr 라이브러리를 사용하는 프로그래밍 언어가 많지 않습니다.
- 장점:
- MongoDB와 같은 NoSQL 데이터베이스에서 사용하는 데이터 형식입니다.
- 문서 형식 데이터를 저장하는 데 적합합니다.
- 단점:
- Numpy 배열만큼 효율적이지 않을 수 있습니다.
- BSON 데이터베이스를 사용해야만 사용할 수 있습니다.
Feather:
- 장점:
- Parquet와 유사한 열 형식 데이터를 저장하는 데 사용할 수 있는 빠르고 효율적인 파일 형식입니다.
- 대규모 데이터 세트를 처리하는 데 적합합니다.
- 단점:
SQLite:
- 장점:
- 관계형 데이터베이스에 Numpy 배열을 저장하는 데 사용할 수 있는 가볍고 효율적인 데이터베이스입니다.
결론
python numpy pickle