使用 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
会处理压缩本身?
最佳答案
借自Storing numpy sparse matrix in HDF5 (PyTables) ,您可以使用 data
、indicies
和 indptr
属性将 scipy.sparse
数组编码为 pytables 格式,这是三个常规的 numpy.ndarray
对象。
关于python - 使用 pytables,哪个更有效 : scipy. 稀疏矩阵或 numpy 密集矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8895120/