2013-03-16 7 views
0

나는 파이썬언제 h5py가 데이터를 저장하는 데 유용합니까? 단지, 나는 그것이 일반 데이터 파일이 많은 공간 절약 발견 된 두 개의 데이터 열을 말할 저장하려고 할 때

import h5py 
def store(eigenvalues,eigenvectors,name='01_'): 

     datafile = h5py.File(name+'data.h5', 'w') 

     datafile['eigenvalues'] = eigenvalues 
     datafile['eigenvectors'] = (eigenvectors) 
     datafile.close() 
     print "Successfully saved eigenvalues and eigenvectors" 

이 많은 를 저장할 정말 유용를 사용하여 데이터를 저장하는 데 h5py 사용하지만하고 실력 있는. h5py 형식의 저장소가 더 효율적일 수있는 중요한 데이터 크기가 있습니까? 또한이 형식을 사용하는 다른 확실하지 않은 이점이 있습니까?

+0

저는 h5py 라이브러리의 전문가는 아니지만, HDF5 형식으로 데이터를 저장하는 압축 방법이 있어야합니다. 너는 그것을 시도 할 수있다. 압축하지 않은 크기 오버 헤드는 파일 형식이 유지하는 중독 적 정보 때문일 수 있습니다. HDF5는 단지 하나의 어레이를 저장하는 것으로 생각되지 않지만, 다중 저장으로부터의 데이터의 복잡한 엔디 언블 (ensamble)을 복잡하게합니다. – EnricoGiampieri

답변

1

HDF5를 사용하면 많은 이점이 있습니다. @ EnricoGiampieri에 따르면, 일반적으로 단일 배열이 아닌 대규모 앙상블 데이터를 저장하는 데 일반적으로 사용됩니다. 또한 관련된 모든 메타 데이터를 동시에 저장하는 데 유용합니다. HDF5 website

HDF5 기술 슈트에서 포함 : 매우 복잡한 데이터 객체 및 메타 데이터의 다양한 종류를 나타낼 수

  • 다목적 ​​데이터 모델.
  • 컬렉션의 데이터 개체 수나 크기에 제한이없는 완전히 이식 가능한 파일 형식입니다.
  • 랩톱에서 대규모 병렬 시스템에 이르기까지 다양한 컴퓨팅 플랫폼에서 실행되는 소프트웨어 라이브러리로 C, C++, Fortran 90 및 Java 인터페이스가있는 높은 수준의 API 인 을 구현합니다.
  • 액세스 시간 및 저장 공간 최적화를위한 풍부한 통합 성능 기능 세트입니다.
  • 컬렉션의 데이터를 관리, 조작, 확인 및 분석하기위한 도구 및 응용 프로그램입니다.

그 자체 설명되는 계층 적 데이터 포맷 - 파일의 데이터 세트가 쉽게 검색 것을 의미한다. 매우 큰 파일 크기와 대량 병렬 I/O로 확장됩니다.

압축과 관련하여 이것은 개별 데이터 집합의 속성이며 해당 데이터 집합을 만들 때 지정해야합니다. GZIP, SZIP 및 LZF가 모두 지원되는 압축 알고리즘을 사용할 수있는 몇 가지 옵션이 있습니다. h5py wiki에 대한 자세한 정보가 있습니다.

이 파일에 압축을 적용하려면 다음을 수행하십시오 여기

import h5py 
def store(eigenvalues,eigenvectors,name='01_'): 

    datafile = h5py.File(name+'data.h5', 'w') 

    eigenvalues_dset = datafile.create_dataset('eigenvalues', eigenvalues.shape, eigenvalues.dtype, compression='gzip', compression_opts=4) 
    eigenvectors_dset = datafile.create_dataset('eigenvectors', eigenvalues.shape, eigenvectors.dtype, compression='gzip', compression_opts=4) 

    datafile['eigenvalues'][:] = eigenvalues 
    datafile['eigenvectors'][:] = (eigenvectors) 
    datafile.close() 
    print "Successfully saved eigenvalues and eigenvectors" 

내가 eigenvalueseigenvectors 모두 NumPy와 배열이 있다고 가정 한을. 그렇지 않은 경우 변환해야합니다 (그냥 numpy.array(eigenvalues) 사용). 또한 데이터 세트를 할당하기 위해 [:]을 사용했습니다. datafile['eigenvalues']은 HDF5 객체이고 datafile['eigenvalues'][:]은 해당 객체의 실제 데이터이기 때문입니다. HDF5 객체는 데이터뿐만 아니라 속성 및 메타 데이터도 보유합니다.