[python] h5py에 대한 입력 및 출력 numpy 배열

출력이 여기에 이미지 설명 입력크기 가 지정된 행렬이고 항목이 모두 유형 인 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

문서를 확실히 확인하십시오.

http://docs.h5py.org

hdf5 파일에 쓰기는 h5py 또는 pytables에 따라 다릅니다 (각각 hdf5 파일 사양 위에있는 다른 Python API가 있음). 또한 기본적으로 같은 NumPy와 제공하는 다른 간단한 바이너리 형식을 살펴해야한다 np.save, np.savez등 :

http://docs.scipy.org/doc/numpy/reference/routines.io.html


답변

파일 열기 / 닫기를 처리하고 메모리 누수를 방지 하는 더 깨끗한 방법 :

예습:

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'][:]


답변