2012-06-27 7 views
5

私のプログラムはnumpyのsavezルーチンで保存する大きなデータ配列を作成するとします。しかし、私はまた、その配列と一緒にいくつかの追加情報を保存したいと思います。例としては、現在のバージョンのgit commit IDと、データを生成するために使用された入力パラメータを使用して、後でデータを見て、作成した方法を正確に知ることができます。numz配列を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' 

だから、あなたは、任意の名前のデータを保存して、辞書のようなオブジェクトを取得することができます。おそらくそれは、より柔軟性があり、メタデータのすべての種類のためのサポートが組み込まれています使用するより良いフォーマットがh5pyまたはpytablesのいずれかを使用してHDF5です:一言で言えば

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

http://www.pytables.org/

+0

ああ、私は私の答えを終えたばかりとHDFの提案を追加しました! 'h5py'の使用例と同じように、私も去って行きます。しかし、いい答えです。 –

+0

あなたとJoe Kingtonの答えが非常に役に立ちました。私は受け入れるものを決めることができませんでしたので、あなたが最初だったので私はあなたを取った:) – Lagerbaer

7

、あなたは(できます.npzはちょうど節約されたディクテーションです)、おそらく他のものに切り替える方が良いでしょう。 (ちょうど@JoshAdelが.npzに固執したい場合にこれを行う良い例を投稿したようです。)

HDFはこのようなもののはるかに良い選択です。

hdfファイルの各グループまたはデータセットには、属性を格納できます。

numpy配列をhdfファイルに格納する場合は、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にとって非常に役立ちます。これらの属性のサイズに制限はありますか? –

関連する問題