1

假设我有一个占用数十 GB的巨大 numpy 矩阵A。分配此内存需要花费不可忽略的时间。

假设我还有一组与 numpy 矩阵具有相同维度的 scipy 稀疏矩阵。有时我想将这些稀疏矩阵之一转换为密集矩阵以执行一些向量化操作。

我可以将这些稀疏矩阵之一加载到A中,而不是每次我想将稀疏矩阵转换为密集矩阵时重新分配空间吗?scipy 稀疏矩阵上可用的 .toarray() 方法似乎没有采用可选的密集数组参数,但也许还有其他方法可以做到这一点。

4

2 回答 2

2

If the sparse matrix is in the COO format:

def assign_coo_to_dense(sparse, dense):
    dense[sparse.row, sparse.col] = sparse.data

If it is in the CSR format:

def assign_csr_to_dense(sparse, dense):
    rows = sum((m * [k] for k, m in enumerate(np.diff(sparse.indptr))), [])
    dense[rows, sparse.indices] = sparse.data

To be safe, you might want to add the following lines to the beginning of each of the functions above:

assert sparse.shape == dense.shape
dense[:] = 0
于 2012-02-06T11:49:20.357 回答
1

似乎应该有更好的方法来做到这一点(我还没有仔细阅读文档),但是您总是可以遍历稀疏数组的元素并分配给密集数组(可能首先将密集数组归零)。如果这最终太慢,那似乎是一个易于编写的 C 扩展......

于 2012-01-28T02:36:55.700 回答