2012-06-27 39 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非常有幫助。這些屬性的大小是否有限制? –

相關問題