2012-01-12 17 views
16

PyTablesを使用してnumpy多次元配列をHDF5ファイルに配置するにはどうすればよいですか?Python:PyTablesにnumpy多次元配列を格納する方法は?

私はpytablesテーブルに配列フィールドを置くことはできません。

また、この配列に関する情報を保存し、数学的計算を行う必要があります。

提案がありますか?

+8

を指定せずに、直接配列を受け入れることができます。これは 'f.create_dataset( 'name'、data = x)'と同じくらい単純です。ここで 'x'はあなたのnumpy配列で、' f'は開いているhdfファイルです。 'pytables'で同じことをすることは可能ですが、かなり困難です。 –

+0

Joe、+1。私はほぼ同じコメントを投稿しようとしていました。 –

+0

私はそれを考えましたが、pytablesには配列の計算を直接行うためのいくつかの機能(tables.expr)がありますが、h5pyでそれを持つことはできますか? – scripts

答えて

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に変更されました。また、あなただけのストレートNDアレイアップの多くを保存している場合、あなたは `h5py`の代わりに、` pytables`との方がいいでしょう、正直なところ​​、

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

これは完璧に働いてくれてありがとう!! – scripts

+5

これは、http://pytables.github.io/usersguide/tutorials.htmlの「新しい配列オブジェクトの作成」の節で説明しているように、ファイルオブジェクトのcreate_arrayメソッドを使用することで、もっと簡単に行うことができることに注意してください。 –

関連する問題