假設我的程序創建了大量數據,然後使用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