Python: как хранить многоядерный массив numpy в PyTables?

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

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

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

Любые предложения?

Ответ 1

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

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. 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)