Python: как сохранить многомерный массив в PyTables? - PullRequest
17 голосов
/ 13 января 2012

Как поместить многомерный массив в файл HDF5 с помощью PyTables?

Из того, что я могу сказать, я не могу поместить поле массива в таблицу pytables.

Мне также нужно хранить некоторую информацию об этом массиве и иметь возможность выполнять математические вычисления на нем.

Есть предложения?

1 Ответ

34 голосов
/ 13 января 2012

Там может быть более простой способ, но, как я знаю, вы бы поступили так:

import numpy as np
import tables

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

# Store "x" in a chunked array...
f = tables.open_file('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.open_file('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. Он также может принимать массив напрямую, без указания atom,

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