假设我的程序创建了大量数据,然后使用numpy的savez例程保存。不过,我还想与该阵列一起存储一些附加信息。例子是当前版本的git commit id,以及用于生成数据的输入参数,以便以后我可以查看数据并确切知道如何创建它。使用savez保存时可以注释一个numpy数组吗
有没有办法将这些信息直接与数组一起保存在一个npz文件中,还是我需要创建一个单独的文件?
假设我的程序创建了大量数据,然后使用numpy的savez例程保存。不过,我还想与该阵列一起存储一些附加信息。例子是当前版本的git commit id,以及用于生成数据的输入参数,以便以后我可以查看数据并确切知道如何创建它。使用savez保存时可以注释一个numpy数组吗
有没有办法将这些信息直接与数组一起保存在一个npz文件中,还是我需要创建一个单独的文件?
您应该能够:
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 .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()
+1我在研究中使用了很多h5py。我对pytables的使用经验很少,但我知道很多使用它的人。 – JoshAdel
这对JoshAdel非常有帮助。这些属性的大小是否有限制? –
啊,你加入就在我完成了我的答案HDF建议!我也会离开我的,就像它有一个使用'h5py'的例子。好的答案,但。 –
我发现你和Joe Kington的回答都很有帮助。我无法决定哪一个接受,所以我拿走了你的,因为你是第一个:) – Lagerbaer