2010-08-23 1 views
13

디스크에 512^3 어레이를 어떤 방식으로 저장해야하며 현재 HDF5를 사용하고 있습니다. 배열이 희소하기 때문에 많은 디스크 공간이 낭비됩니다.HDF5의 희소 배열 지원

HDF5는 희소 배열을 지원합니까?

+0

[이 답변] [1]은 (파이썬 전용) 솔루션을 제공합니다. [1] : http://stackoverflow.com/a/22589030/2858145 –

답변

2

청크 분할 데이터 세트 (H5D_CHUNKED가) 스파 스 저장하지만 데이터에 따라, 오버 헤드가 중요하다 할 수 있습니다.

일반적인 배열을 사용하고 스파 스 및 비 스파 스 모두를 시도한 다음 파일 크기를 비교하면 실제로 가치가있는 지 알 수 있습니다.

+1

예, [this] (http://mail.hdfgroup.org/pipermail/hdf-forum_hdfgroup.org/2010-March/002704.html) 게시물은 어떻게하는지 설명합니다 (또는 어쩌면 _ 할 필요가 없음). – andreabedini

1

HDF5는 인덱스 스토리지를 제공합니다 http://www.hdfgroup.org/HDF5/doc/TechNotes/RawDStorage.html

+0

안녕하세요, hdf5가 내부적으로 어떻게 작동하는지 잘 모르겠습니다. 어떻게 원시 데이터를 hdf5 파일에 저장할 수 있습니까? 테이블 데이터 형식을 무시하고 내 구조를 작성할 수 있다는 뜻입니까? – andreabedini

12

한 가지 해결 방법은 compression option으로 데이터 집합을 만드는 것입니다. 예를 들어, 파이썬에서 h5py를 사용하여 : 결과 파일은 4.5 KB입니다

import h5py 
f = h5py.File('my.h5', 'w') 
d = f.create_dataset('a', dtype='f', shape=(512, 512, 512), fillvalue=-999., 
        compression='gzip', compression_opts=9) 
d[3, 4, 5] = 6 
f.close() 

. 압축하지 않으면이 파일은 약 512MB가됩니다. 대부분의 데이터가 -999. (또는 원하는 경우 fillvalue)이므로 99.999 %의 압축입니다.


등가는 example shown in h5group.cpp으로 9 H5::DSetCreatPropList::setDeflate 설정하여 C++ HDF5 된 API를 사용하여 달성 될 수있다.

+0

분석은 실제로 파이썬에서 이루어 지지만, hdf5 파일은 C++로 생성되므로 h5py는 옵션이 아닙니다. hdf5는 기본적으로 같은 종류의 압축을 지원합니까? pytables 및 h5py 지원 추가 압축 프로토콜을 알고 있습니다. – andreabedini

+1

@andreabedini 동일한 기술을 사용하는 C++ 예제에 대한 링크로 답변을 업데이트했습니다. 압축을 가능하게하려면 데이터 세트를 청크해야한다고 생각합니다. –

+0

답변 시작 부분의 [HDF5 링크] (http://docs.h5py.org/en/latest/high/dataset.html#chunked-storage)에서 : "청크 스토리지로 데이터 세트의 크기를 조정할 수 있으며 압축 된 필터를 사용하기 위해 고정 크기의 청크에 데이터가 저장되기 때문입니다. " 압축을 위해 청킹이 필요합니다. – hBy2Py