2012-06-27 36 views
5

假设我的程序创建了大量数据,然后使用numpy的savez例程保存。不过,我还想与该阵列一起存储一些附加信息。例子是当前版本的git commit 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文件中的每个组或数据集都可以存储属性。

我建议h5py将numpy数组存储在hdf文件中。

举个例子:

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非常有帮助。这些属性的大小是否有限制? –

相关问题