При использовании pytables
нет поддержки (насколько я могу судить) для форматов матриц scipy.sparse
, поэтому для хранения матрицы мне нужно выполнить некоторое преобразование, например.
def store_sparse_matrix(self):
grp1 = self.getFileHandle().createGroup(self.getGroup(), 'M')
self.getFileHandle().createArray(grp1, 'data', M.tocsr().data)
self.getFileHandle().createArray(grp1, 'indptr', M.tocsr().indptr)
self.getFileHandle().createArray(grp1, 'indices', M.tocsr().indices)
def get_sparse_matrix(self):
return sparse.csr_matrix((self.getGroup().M.data, self.getGroup().M.indices, self.getGroup().M.indptr))
Беда в том, что функция get_sparse
требует некоторого времени (чтение с диска), и, если я правильно понимаю, еще и требует, чтобы данные поместились в память.
Единственный другой вариант, по-видимому, заключается в преобразовании матрицы в плотный формат (numpy array
), а затем обычном использовании pytables
. Однако это кажется довольно неэффективным, хотя я полагаю, что, возможно, pytables
будет заниматься самим сжатием?