使用pytables,scipy.sparse还是numpy稠密矩阵更有效率?
在使用 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
借鉴自在HDF5(PyTables)中存储numpy稀疏矩阵,你可以将一个scipy.sparse
数组转换成pytables格式,方法是使用它的data
、indicies
和indptr
这三个属性,这三个属性都是普通的numpy.ndarray
对象。