Использование pytables, что более эффективно: scipy.sparse или плотная матрица numpy? - PullRequest
9 голосов
/ 17 января 2012

При использовании 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 будет иметь дело с самим сжатием?

1 Ответ

2 голосов
/ 24 января 2014

Заимствуя из Сохраняя пустую разреженную матрицу в HDF5 (PyTables) , вы можете преобразовать массив scipy.sparse в формат pytables, используя его атрибуты data, indicies и indptr, которыетри обычных numpy.ndarray объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...