使用pytables,scipy.sparse还是numpy稠密矩阵更有效率?

9 投票
1 回答
2208 浏览
提问于 2025-04-17 10:26

在使用 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格式,方法是使用它的dataindiciesindptr这三个属性,这三个属性都是普通的numpy.ndarray对象。

撰写回答