5

假设我的程序创建了一个大型数据数组,然后我使用 numpy 的 savez 例程保存这些数据。但是,我还想将一些附加信息与该数组一起存储。示例是当前版本的 git commit id,以及用于生成数据的输入参数,以便稍后我可以查看数据并确切知道我是如何创建它的。

有没有办法将此信息与数组一起直接保存在 npz 文件中,还是我必须创建一个单独的文件?

4

2 回答 2

7

简而言之,你可以(.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()
于 2012-06-27T19:01:11.757 回答
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/

于 2012-06-27T18:55:52.600 回答