2012-06-27 2 views
5

내 프로그램이 numpy의 savez 루틴으로 저장하는 많은 양의 데이터를 생성한다고 가정 해보십시오. 그러나, 나는 또한 그 배열과 함께 몇 가지 추가 정보를 저장하고 싶습니다. 예를 들어 현재 버전의 git 커밋 ID와 나중에 데이터를보고 내가 만든 방법을 정확히 알 수 있도록 데이터를 생성하는 데 사용되는 입력 매개 변수가 있습니다.savez로 저장할 때 numpy 배열에 주석을 달 수 있습니까?

이 정보를 npz 파일의 배열과 함께 직접 저장하는 방법이 있습니까, 아니면 별도의 파일을 만들어야합니까?

답변

4

당신은 할 수 있어야 :

In [2]: a = np.arange(10) 

In [3]: b = 'git push' 

In [5]: np.savez('file',a=a,b=b) 

In [7]: data = np.load('file.npz') 

In [8]: data.keys() 
Out[8]: ['a', 'b'] 

In [9]: data['a'] 
Out[9]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

In [10]: str(data['b']) 
Out[10]: 'git push' 

그래서 당신은 임의의 이름 데이터를 저장하고 사전 같은 객체를 얻을 수 있습니다. (당신이 할 수있는 한마디로

http://h5py.alfven.org/docs/

http://www.pytables.org/

+0

아, 당신은 내 대답을 마무리 한 것처럼 HDF 제안을 추가! 나는 'h5py'를 사용하는 예제를 가지고있는 것처럼 내 것을 떠날 것입니다. 좋은 대답. –

+0

귀하와 Joe Kington의 대답이 모두 도움이됨을 발견했습니다. 나는 어느 것을 받아 들일지 결정할 수 없었습니다. 그래서 당신이 처음 이었기 때문에 당신을 데려갔습니다 :) – Lagerbaer

7

: 아마도 더 나은 형식이 더 유연 수를 사용하고 메타 데이터의 모든 종류에 대한 지원이 포함되어 있습니다 것은 h5py 또는 pytables을 사용하여 HDF5입니다 .npz은 그냥 절인 것입니다.)하지만 다른 것으로 전환하는 것이 좋습니다. (@JoshAdel이 방금 .npz을 고수하고 싶다면이 예제를 게시 한 것 같습니다.)

HDF는 이와 같은 상황에서 훨씬 더 나은 선택입니다.

hdf 파일의 각 그룹 또는 데이터 세트는 속성을 저장할 수 있습니다.

나는 hdf 파일에 numpy 배열을 저장하기 위해 h5py을 권장합니다. 예를 들어

:

import numpy as np 
import h5py 

somearray = np.random.random(100) 

f = h5py.File('test.hdf', 'w') 

dataset = f.create_dataset('my_data', data=somearray) 

# Store attributes about your dataset using dictionary-like access 
dataset.attrs['git id'] = 'yay this is a string' 

f.close() 
+0

+1 내 연구에 h5py를 많이 사용합니다. 나는 그것을 사용하는 많은 사람들을 알고 있지만, pytables에 대한 경험이 훨씬 적습니다. – JoshAdel

+0

이것은 JoshAdel에게 매우 도움이됩니다. 이러한 속성의 크기에 제한이 있습니까? –

관련 문제