출력이 크기 가 지정된 행렬이고 항목이 모두 유형 인 Python 코드가 float
있습니다. 확장자로 저장 .dat
하면 파일 크기는 500MB 정도입니다. 사용 h5py
하면 파일 크기가 상당히 줄어든다는 것을 읽었습니다 . 그래서 2D numpy 배열이 A
. h5py 파일에 어떻게 저장합니까? 또한 배열을 조작해야하므로 동일한 파일을 읽고 다른 코드에 numpy 배열로 배치하는 방법은 무엇입니까?
답변
h5py는 데이터 세트 및 그룹 모델을 제공합니다 . 전자는 기본적으로 배열이고 후자는 디렉토리라고 생각할 수 있습니다. 각각 이름이 지정됩니다. API 및 예제에 대한 문서를 확인해야합니다.
http://docs.h5py.org/en/latest/quick.html
모든 데이터를 미리 만들고 hdf5 파일에 저장하려는 간단한 예는 다음과 같습니다.
In [1]: import numpy as np
In [2]: import h5py
In [3]: a = np.random.random(size=(100,20))
In [4]: h5f = h5py.File('data.h5', 'w')
In [5]: h5f.create_dataset('dataset_1', data=a)
Out[5]: <HDF5 dataset "dataset_1": shape (100, 20), type "<f8">
In [6]: h5f.close()
그런 다음 다음을 사용하여 해당 데이터를 다시로드 할 수 있습니다. ‘
In [10]: h5f = h5py.File('data.h5','r')
In [11]: b = h5f['dataset_1'][:]
In [12]: h5f.close()
In [13]: np.allclose(a,b)
Out[13]: True
문서를 확실히 확인하십시오.
hdf5 파일에 쓰기는 h5py 또는 pytables에 따라 다릅니다 (각각 hdf5 파일 사양 위에있는 다른 Python API가 있음). 또한 기본적으로 같은 NumPy와 제공하는 다른 간단한 바이너리 형식을 살펴해야한다 np.save
, np.savez
등 :
답변
파일 열기 / 닫기를 처리하고 메모리 누수를 방지 하는 더 깨끗한 방법 :
예습:
import numpy as np
import h5py
data_to_write = np.random.random(size=(100,20)) # or some such
쓰다:
with h5py.File('name-of-file.h5', 'w') as hf:
hf.create_dataset("name-of-dataset", data=data_to_write)
읽다:
with h5py.File('name-of-file.h5', 'r') as hf:
data = hf['name-of-dataset'][:]