Ответ на DaveP является почти право ... но может вызвать проблемы для очень разреженных матриц: если в последнем столбце (ы) или строки (-ы) пусты, они отбрасываются. Поэтому, чтобы быть уверенным, что все работает, атрибут «shape» также должен быть сохранен.
Это код, который я регулярно использую:
import tables as tb
from numpy import array
from scipy import sparse
def store_sparse_mat(m, name, store='store.h5'):
msg = "This code only works for csr matrices"
assert(m.__class__ == sparse.csr.csr_matrix), msg
with tb.openFile(store,'a') as f:
for par in ('data', 'indices', 'indptr', 'shape'):
full_name = '%s_%s' % (name, par)
try:
n = getattr(f.root, full_name)
n._f_remove()
except AttributeError:
pass
arr = array(getattr(m, par))
atom = tb.Atom.from_dtype(arr.dtype)
ds = f.createCArray(f.root, full_name, atom, arr.shape)
ds[:] = arr
def load_sparse_mat(name, store='store.h5'):
with tb.openFile(store) as f:
pars = []
for par in ('data', 'indices', 'indptr', 'shape'):
pars.append(getattr(f.root, '%s_%s' % (name, par)).read())
m = sparse.csr_matrix(tuple(pars[:3]), shape=pars[3])
return m
Это тривиально, чтобы адаптировать его к CSC матриц.
Вы беспокоитесь о размере данных на диске? Я думаю, что файлы hdf5 могут быть сохранены в сжатом формате, и в этом случае вам может быть просто просто сохранить плотную матрицу. – user545424
См. Http://stackoverflow.com/questions/8895120/using-pytables-which-is-more-efficient-scipy-sparse-or-numpy-dense-matrix, похоже, что для разреженных матриц нет поддержки pytables. – user545424