2012-01-12 65 views
16

如何使用PyTables將一個numpy多維數組放入HDF5文件中?Python:如何在PyTables中存儲一個numpy多維數組?

從我能告訴我不能把數組字段放在pytables表中。

我還需要存儲一些關於這個數組的信息,並且能夠對它進行數學計算。

有什麼建議嗎?

+8

老實說,如果你存儲大量的只是直線上升ND數組,你用'h5py',而不是'pytables'更好。它和'f.create_dataset('name',data = x)'一樣簡單''其中'x'是你的numpy數組,'f'是開放的hdf文件。在'pytables'中做同樣的事情是可能的,但是相當困難。 – 2012-01-12 22:16:55

+0

Joe,+1。我即將發表幾乎相同的評論。 – 2012-01-12 22:21:07

+0

我想到了,但pytables有一些功能(tables.expr)直接在數組上進行計算,我可以用h5py做到嗎? – scripts 2012-01-12 22:22:25

回答

32

有可能是一個更簡單的方法,但這是你如何去這樣做,因爲據我所知:

import numpy as np 
import tables 

# Generate some data 
x = np.random.random((100,100,100)) 

# Store "x" in a chunked array... 
f = tables.openFile('test.hdf', 'w') 
atom = tables.Atom.from_dtype(x.dtype) 
ds = f.createCArray(f.root, 'somename', atom, x.shape) 
ds[:] = x 
f.close() 

如果要指定壓縮的使用,看看tables.Filters。例如。

import numpy as np 
import tables 

# Generate some data 
x = np.random.random((100,100,100)) 

# Store "x" in a chunked array with level 5 BLOSC compression... 
f = tables.openFile('test.hdf', 'w') 
atom = tables.Atom.from_dtype(x.dtype) 
filters = tables.Filters(complib='blosc', complevel=5) 
ds = f.createCArray(f.root, 'somename', atom, x.shape, filters=filters) 
ds[:] = x 
f.close() 

有可能是很多這種簡單的方法......我沒有在很長一段時間比類似表格數據之外的任何使用pytables

說明:與pytables 3.0,f.createCArray更名爲f.create_carray。它也可以直接接受陣列,而不指定​​,

f.create_carray('/', 'somename', obj=x, filters=filters) 
+0

謝謝它的工作完美無瑕! – scripts 2012-01-12 23:32:43

+5

請注意,現在可以使用文件對象上的create_array方法更直接地完成此操作,如http://pytables.github.io/usersguide/tutorials.html中的'創建新的數組對象'部分所述。 – 2014-10-02 15:52:52

相關問題