4

いくつかのhdf5ファイルがあり、それぞれが同じ構造を持っています。pytableどうにかしてファイルをマージして、そのうちの1つを作成したいと思いhdf5ます。

つまり、ファイル 1 の配列のサイズが x で、ファイル 2 の配列のサイズが y の場合、結果の配列pytableのサイズは x+y になり、最初にファイル 1 のすべてのエントリが含まれ、次にファイル 2 のすべてのエントリが含まれます。

4

1 に答える 1

6

これを行う方法は、使用しているデータ型によって若干異なります。配列と CArray は静的なサイズであるため、データ領域を事前に割り当てる必要があります。したがって、次のようなことを行います。

import tables as tb
file1 = tb.open_file('/path/to/file1', 'r')
file2 = tb.open_file('/path/to/file2', 'r')
file3 = tb.open_file('/path/to/file3', 'r')
x = file1.root.x
y = file2.root.y

z = file3.create_array('/', 'z', atom=x.atom, shape=(x.nrows + y.nrows,))
z[:x.nrows] = x[:]
z[x.nrows:] = y[:]

ただし、EArray と Table は拡張可能です。したがって、サイズを事前に割り当てる必要はなく、代わりに copy_node() と append() を使用できます。

import tables as tb
file1 = tb.open_file('/path/to/file1', 'r')
file2 = tb.open_file('/path/to/file2', 'r')
file3 = tb.open_file('/path/to/file3', 'r')
x = file1.root.x
y = file2.root.y

z = file1.copy_node('/', name='x', newparent=file3.root, newname='z')
z.append(y)
于 2013-10-01T17:26:53.307 に答える